【问题标题】:why sqlite returns row counts of while Join为什么sqlite返回while Join的行数
【发布时间】:2015-11-09 18:17:04
【问题描述】:

sqlite 在执行此查询时返回行数

SELECT sum(s.Card_10) ,sum(p.Card_10) FROM Sales_Table s ,  Purchase_Table p

回答 是 sum(s.Card_10) 4 和 sum(card_10) 是 40

但如果有任何单独执行这些查询,它会重新运行正确答案

Select sum(Card_10) from sales_table 

回答 1 和

Select sum(Card_10) from Purchase_table 

回答

40

为什么在这种类型的 JOINS 中会发生错误?

【问题讨论】:

  • 不要在FROM 子句中使用逗号。它创建两个表的笛卡尔积。如果这是您想要的,那么请明确并使用CROSS JOIN
  • 交叉联接在这里也返回相同的答案,我只是转储数据
  • SELECT sum(s.Card_10) ,sum(p.Card_10) FROM Sales_Table s CROSS JOIN Purchase_Table p -----------同4和40

标签: sql sqlite join


【解决方案1】:

在查询中

SELECT sum(s.Card_10) ,sum(p.Card_10) FROM Sales_Table s ,  Purchase_Table p

将执行sales_tablepurchase_table 中的cross join。因此,如果sales_table1 行的card_10 列值为1,purchase_table4 行的card_10 值不同,总和为40。

所以cross join(带有一些虚拟数据)看起来像

s.card_10   p.card_10
  1            5
  1            10
  1            8
  1            17

因此你得到不正确的结果。

在单个查询中获得正确计数的一种方法是使用union

select sum(Card_10) from sales_table 
union all
select sum(Card_10) from Purachase_table 

select max(fromsalestable) as fromsalestable, max(frompurchasetable) as frompurchasetable 
from
(
select sum(Card_10) as fromsalestable, null as frompurchasetable from sales_table 
union all
select null, sum(Card_10) from Purachase_table
) t

【讨论】:

  • (Y) Yppp Budddyyy THxx
猜你喜欢
  • 2019-03-03
  • 2011-06-11
  • 1970-01-01
  • 2018-03-27
  • 2019-04-16
  • 2019-07-23
  • 2016-11-01
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多