我想将TableA连接到TableB,其中tableA中的某个条件为true 所以我做这种类型的SQL查询
Select * from
TableA Left Join TableB on TableA.fld1 = TableB.fld2
where TableA.fld3 = True
这很好用。 然而,现在我想只使用TableB中的某些记录进行Join,即那些记录 在表B中满足某个条件,特别是 fld4 具有 false 作为其值。我想这样做的原因是我想知道tableA中哪些行在tableB中的行中没有匹配,其中 fld4 false 。
如果我要删除TableB中 fld4 true 的所有行并运行上述查询 我会得到正确的结果。我需要做的就是在某些单元格中找到结果记录集中的行。 但是,如果不是从TableB中删除行,而是首先将查询更改为下面的一行,我得到的所有行都没有返回
Select * from
TableA Left Join TableB on TableA.fld1 = TableB.fld2
where TableA.fld3 = True
and TableB.fld4 = false
如果我的ramblings有意义,有人可以告诉我我做错了什么吗? 感谢
答案 0 :(得分:8)
您应该将条件放在join子句中。如果有一个where子句可以过滤左连接查询“右侧”的行,则最终会排除行。试试这个:
Select *
from TableA
Left Join TableB
on TableA.fld1 = TableB.fld2
and TableB.fld4 = false
where TableA.fld3 = True
答案 1 :(得分:6)
将它放在join子句中:
select * from TableA
left join TableB
on TableA.fld1 = TableB.fld2
and TableB.fld4 = False
where TableA.fld3 = True
编辑:啊,我错过了这个:
我想知道tableA中哪些行在tableB中的行中没有匹配,其中fld4为false。
Joel的查询可行,但由于您对TableB中的任何行不感兴趣,因此相关子查询可能更清晰:
select * from TableA
where TableA.fld3 = True
and not exists (
select * from TableB
where TableA.fld1 = TableB.fld2
and TableB.fld4 = False
)
答案 2 :(得分:4)
我想知道tableA中哪些行在tableB中的行中没有匹配,其中fld4为false。
然后你想这样做:
SELECT *
FROM TableA
LEFT JOIN TableB on TableA.fld1 = TableB.fld2 AND TableB.fld4 = False
WHERE TableA.fld3 = True
AND TableB.fld4 IS NULL