为什么这个查询会产生如此多的数据?

时间:2010-10-18 23:24:04

标签: sql db2

我为标题道歉,但我忘记了它在SQL术语中实际调用的内容。

正在使用此查询:

SELECT DISTINCT a.col1, a.col2,a.col3,c.col1, c.col2

FROM table1 a

LEFT JOIN table2 c ON a.col1 = c.col3

WHERE a.col2 = '038CQH'

我得到一个大约56000行的结果,但当我使用时检查:

SELECT a.col1, a.col2,a.col3 FROM table1 a where a.col2='038CQH'

我只有4行。

3 个答案:

答案 0 :(得分:2)

这是因为table1中的4条记录根据table2中的记录连接到table2中的许多记录,其中col3与table1中的col1匹配。顺便说一句 - 这些都是可怕的专栏名称。

答案 1 :(得分:1)

左连接(left join实际上是left outer join)。这意味着 - 获取table1中的所有记录和table2中的所有记录,但是a.col1!= c.col3,在所有table2列上放置空值。

也许您需要一个内部联接?它只会添加table2中的列,其中a.col1 = c.col3

答案 2 :(得分:0)

稍微不同的方法 - 重新运行查询:

SELECT a.col1, a.col2,a.col3 FROM table1 a where a.col2='038CQH'

记下a.col1的四个值,返回为[a1],[a2],[a3]和[a4]。

然后尝试对table2运行以下查询:

SELECT DISTINCT c.col1, c.col2
table2 c WHERE c.col3 IN ([a1], [a2], [a3], [a4])

(其中[a1]等已被先前提到的值替换。)