Mysql sql联接问题,无法从表a中检索与表b中的某些条件匹配的记录,以及其余被忽略的表a记录
我正在编写一个sql查询,以获取表a中与表b匹配的所有记录,以及表a中所有遗漏的记录,这些记录不在表b中。下面是代码和表格 表AMysql sql联接问题,无法从表a中检索与表b中的某些条件匹配的记录,以及其余被忽略的表a记录,mysql,sql,database,datatables,Mysql,Sql,Database,Datatables,我正在编写一个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_
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
您可以在
WHERE
子句中使用notexists
,如下所示:
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')
请参阅。结果:
谢谢你的回答。但问题是,如果表b有两个值,并且其中没有一个值的key为true,那么我需要结果中的两个值。这可能吗?请学习正确标记您的问题。MySQL和Oracle是两种完全不同的产品。这是哪一个???
> skey | OrderName
> ---: | :--------
> 100 | Pen
> 101 | any