【问题标题】:SELECT subset from two tables and LEFT JOIN results从两个表中选择子集和 LEFT JOIN 结果
【发布时间】:2010-05-03 17:32:47
【问题描述】:

我正在尝试为 SQLITE 编写一些 SQL,它将从两个表(TableA 和 TableB)中获取一个子集,然后执行 LEFT JOIN。

这是我尝试过的,但这会产生错误的结果:

Select * from TableA 
Left Join TableB using(key)
where TableA.key2 = "xxxx"
AND TableB.key3 = "yyyy"

这会忽略 key2="xxxx" 但 key3 != "yyyy" 的情况。

我希望 TableA 中的所有行都符合我的条件,无论它们在 TableB 中的对应值是否匹配,但只有 TableB 中同时符合这两个条件的那些行。

我确实设法通过使用 VIEW 解决了这个问题,但我确信一定有更好的方法来解决这个问题。现在才开始让我发疯,试图解决它。

(感谢您的帮助,希望我已经解释得足够清楚了)。

【问题讨论】:

    标签: sql sqlite left-join


    【解决方案1】:

    你犯了经典的左连接错误。在大多数数据库中,如果您想在左连接右侧的表上设置条件,则必须将此条件放在连接本身而不是 where 子句中。在 SQL Server 中,这会将左连接变成内连接。我没有用过 SQl lite 所以我不知道它是否一样,但所有记录通常必须满足 where 子句。

    【讨论】:

      【解决方案2】:
      Select * 
      from TableA  
      Left Join TableB on TableA.key = TableB.key 
          and TableB.key3 = "yyyy" 
      where TableA.key2 = "xxxx" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多