我正在尝试为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解决了这个问题,但我确信必须有更好的方法来实现这一点。它刚刚开始让我疯狂地尝试解决它。
(感谢您的帮助,希望我已经足够解释了这一点。)
答案 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"