MYSQL得到两个结果的差异



好的,所以我的问题是我有一组结果:

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是可选的。这会使构建可能的列表变得更慢,但更快地确定你是否已经有了其中一个。我会测试一下哪个更快。

相关内容

  • 没有找到相关文章

最新更新