SELECT子集来自两个表和LEFT JOIN结果

时间:2010-05-03 17:32:48

标签: sql sqlite left-join

我正在尝试为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解决了这个问题,但我确信必须有更好的方法来实现这一点。它刚刚开始让我疯狂地尝试解决它。​​

(感谢您的帮助,希望我已经足够解释了这一点。)

2 个答案:

答案 0 :(得分:2)

你已经犯了经典的左连接错误。在大多数数据库中,如果要在左连接右侧的表上存在条件,则必须将此条件放在连接本身而不是where子句中。在SQL Server中,这会将左连接转换为内连接。我没有使用过SQl lite,所以我不知道它是否一样,但是所有记录都必须符合where子句。

答案 1 :(得分:1)

Select * 
from TableA  
Left Join TableB on TableA.key = TableB.key 
    and TableB.key3 = "yyyy" 
where TableA.key2 = "xxxx"