Mysql sql联接问题,无法从表a中检索与表b中的某些条件匹配的记录,以及其余被忽略的表a记录

Mysql 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_

我正在编写一个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

您可以在
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