有人可以帮我解释一下这里发生了什么。
select COUNT(*) from X; -- returns 764
select COUNT(*) from Y; -- returns 878
select COUNT(*) from X,Y; -- returns 670792
为什么计数要高得多。第三个陈述不会返回X和Y中的所有行吗?我不太明白为什么伯爵要高得多。
也许X,Y给我重复的线条?
任何解释都有帮助。谢谢!
答案 0 :(得分:4)
如果您未指定join
条件,则select
查询会返回两个表的caterian产品。 x
中的每一行都与y
中的所有其他行相连接。
例如:如果你有2个关系a = {1,2,3} b = {4,5,6}那么X
b(笛卡儿积)等于{(1,4),(1) ,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)}。
元素数n(a X
b)= n(a)* n(b)
答案 1 :(得分:0)
select COUNT() from X; -- returns 764
select COUNT() from Y; -- returns 878
select COUNT(*) from X,Y; -- returns 670792
会考虑为
select COUNT(*) from X cross join Y
总计数为764 * 878 = 670792
如果你想对X和Y进行计数(假设X和Y中的结构相同)
select count(*) from (select * from X union select * from Y) a