好吧所以我的问题是我有一组结果:
ID CODE 1 A 1 B 3 C
我还有另一张表:
CODE A B C
我想要使用SQL获得的是CODES查询,缺少表1中的每个结果。所以基本上:
ID CODE 1 C 3 A 3 B
任何帮助都会很棒。
答案 0 :(得分:1)
您可以使用:
SELECT a.id, b.code
FROM (SELECT DISTINCT id FROM idcodes) a
CROSS JOIN codes b
LEFT JOIN idcodes c ON a.id = c.id AND b.code = c.code
WHERE c.id IS NULL
ORDER BY a.id, b.code
如果你有另一个表存储id
的唯一条目,那么最好只使用该表而不是DISTINCT
子选择:
SELECT a.id, b.code
FROM ids a
CROSS JOIN codes b
LEFT JOIN idcodes c ON a.id = c.id AND b.code = c.code
WHERE c.id IS NULL
ORDER BY a.id, b.code
答案 1 :(得分:0)
您可以使用exists
。使用笛卡尔联接构建可能的变体的完整列表,然后确保您拥有的不在此列表中。
select id, code
from idcode_table x
where not exists ( select 1
from idcode_table a
cross join code_table b
where b.code = x.code
and a.id = x.id )
也可以使用not in
重新编写。
select id, code
from idcode_table
where (id, code) not in ( select distinct a.id, b.code
from idcode_table a
cross join code_table b )
distinct
是可选的。它会使构建可能列表变慢,但更快确定是否已经有其中一个。我测试它看哪个更快。