[英]SQL join help between two tables
我有两个表表a和表b。
表b包含表a的子集。 我想获得表a中不在表b中的所有id ID(id是一个公共列)尝试使用此SQL,但是它不能从表a中选择名称,其中name不在
select unique name
from table a inner join
table b
on a.id = b.id;
感谢您的帮助
你需要在这里使用LEFT OUTER JOIN
。 这将检索TableA
所有值,只检索那些与TableB
匹配的值,然后在WHERE
子句中,您可以测试TableB
值是否为NULL,只返回没有匹配的TableA
值:
SELECT UNIQUE tableA.id FROM tableA LEFT OUTER JOIN tableB ON a.id = b.id WHERE b.id IS NULL;
一种方法是使用left outer join
使用JNevills方式。
在oracle中你也可以使用exists
:
with TableA as (
select 1 as "COL1" from dual
union all select 2 from dual
union all select 3 from dual
union all select 4 from dual
union all select 5 from dual
), TableB as (
select 1 as "COL1" from dual
union all select 2 from dual
union all select 3 from dual
)
select *
from TableA
where not exists(select *
from TableB
where TableA.COL1 = TableB.COL1)
只需“选择表b中不存在的id”
select a.id
from tab_a
where a.id not in (select b.id from tab_b)
看看SQL Minus操作符 - 有时实现为Except(如在SQLite中)。
select id from TableA minus select id from TableB;
select id from TableA except select id from TableB;
请试试这个对我有用
SELECT * FROM(SELECT a.id,a.name,COUNT(b.name)AS
count
FROM LEFT OUTER JOIN b ON a.name = b.name GROUP BY a.id,a.name)C WHERE C.count = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.