代码之家  ›  专栏  ›  技术社区  ›  lock

为什么这个查询会生成这么多数据?

  •  0
  • lock  · 技术社区  · 14 年前

    呃,我为这个标题道歉,但我忘了它在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 回复  |  直到 14 年前
        1
  •  2
  •   Christoph Jonathan    14 年前

    这是因为表1中的4条记录根据表2中的记录(其中col3与表1中的col1匹配)连接到表2中的许多记录。顺便说一句-这些是可怕的列名。

        2
  •  1
  •   Gabriel McAdams    14 年前

    left join 实际上是 left outer join

        3
  •  0
  •   user359040 user359040    14 年前

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

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

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

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

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

    (其中[a1]等已替换为之前标注的值。)