如何解决sql联接问题,无法从表a中检索与表b中的某些条件匹配的记录,而剩余的表a记录除外
我正在编写一个sql查询,以从表A中获取所有与特定条件匹配表b的记录,以及表a中所有不存在的记录,这些记录不在表b中。下面是代码和表
表A
skey OrderName
100 Pen
100 Cutter
101 any
表b
skey OrderName Key
100 Pen True
100 Cutter
select a.skey,a.orderName
from Test_A a
left join Test_B b
on a.skey=b.skey
where b.kit='True' and a.orderName=b.orderName
我需要的结果是
skey Ordername
100 Pen (Because this is true in table B)
101 any
解决方法
这里是个主意:
select a.skey,a.orderName
from Test_A a left join
Test_B b
on a.skey = b.skey and
a.orderName = b.orderName
where b.kit = 'True' or -- matches and value is true
b.skey is null. -- no match
,
您可以尝试以下-
select a.skey,a.orderName from Test_A a
left join Test_B b
on a.skey=b.skey and a.orderName=b.orderName
where b.kit='True' and b.skey is null
,
您可以在NOT EXISTS
子句中使用WHERE
,如下所示:
SELECT a.*
FROM Test_A a LEFT JOIN Test_B b
ON b.skey = a.skey AND b.OrderName = a.OrderName
WHERE b.kit = 'True'
OR (b.kit IS NULL AND NOT EXISTS (SELECT 1 FROM Test_B WHERE skey = a.skey AND kit = 'True'))
或者没有加入:
SELECT a.*
FROM Test_A a
WHERE EXISTS (SELECT 1 FROM Test_B b WHERE b.skey = a.skey AND b.OrderName = a.OrderName AND b.kit = 'True')
OR NOT EXISTS (SELECT 1 FROM Test_B b WHERE b.skey = a.skey AND b.kit = 'True')
请参见demo。
结果:
> skey | OrderName
> ---: | :--------
> 100 | Pen
> 101 | any
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。