表A左连接(表的子集)表B.

jjb*_*jjb 3 sql

我想将TableA连接到TableB,其中tableA中的某个条件为true所以我做这种类型的SQL查询

Select * from
TableA Left Join TableB on TableA.fld1 = TableB.fld2
where TableA.fld3 = True
Run Code Online (Sandbox Code Playgroud)

这很好用.但是现在我想做的加入只与表B中的某些记录,即当某一条件满足表B中的这些记录,特别是fld4作为其值.我想这样做的原因是我想知道tableA中哪些行在tableB中的行中没有匹配,其中fld4false.

如果我要删除TableB中fld4true的所有行并运行上面的查询,我会得到正确的结果.我需要做的就是在某些单元格中找到结果记录集中的行.但是如果不是从TableB中删除行,我首先将查询更改为下面的一行,我得到的所有行都没有返回

Select * from
TableA Left Join TableB on TableA.fld1 = TableB.fld2
where TableA.fld3 = True
and TableB.fld4 = false
Run Code Online (Sandbox Code Playgroud)

如果我的ramblings有意义,有人可以告诉我我做错了什么吗?谢谢

G M*_*ros 8

您应该将条件放在join子句中.如果有一个where子句可以过滤左连接查询"右侧"的行,则最终会排除行.试试这个:

Select * 
from   TableA 
       Left Join TableB 
         on TableA.fld1 = TableB.fld2 
         and TableB.fld4 = false
where  TableA.fld3 = True 
Run Code Online (Sandbox Code Playgroud)


Pet*_*hia 6

把它放在join子句中:

select * from TableA 
left join TableB 
  on TableA.fld1 = TableB.fld2 
 and TableB.fld4 = False
where TableA.fld3 = True
Run Code Online (Sandbox Code Playgroud)

编辑:啊,我错过了这个:

我想知道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
    )
Run Code Online (Sandbox Code Playgroud)