2

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

识别码
1个
1乙
3℃

我还有另一张桌子:

代码
一个
乙
C

我想使用 SQL 获得的是表 1 中的每个结果都缺失的 CODES 查询。所以基本上:

识别码
1℃
3个
3乙

任何帮助都会很棒。

4

2 回答 2

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

SQLFiddle 演示

于 2012-08-05T18:51:49.253 回答
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是可选的。它会使构建可能列表的速度变慢,但更快地确定您是否已经拥有其中之一。我会测试它,看看哪个更快。

于 2012-08-05T16:48:49.380 回答