好的,所以我的问题是我有一组结果:
ID代码1个1 B3 C
我还有另一张表:
代码A.BC
我想使用SQL得到的是一个CODES查询,表1中的每个结果都丢失了。所以基本上:
ID代码1 C3个3 B
任何帮助都会很棒。
您可以使用:
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
SQLFiddle演示
您可以使用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
是可选的。这会使构建可能的列表变得更慢,但更快地确定你是否已经有了其中一个。我会测试一下哪个更快。