oracle中的Sql从其不同的值中查找缺少的记录
很抱歉,这个不起作用。。。也许我应该早点澄清。值A、B、C、D等。。。是表中代码的不同值。表中有数百个ID,每个ID可以有一到多个代码值。在上面的示例中,假设表A中有5个不同的代码值。有3个ID,每个ID在表A中关联如下 身份证号码 1A 1b 1 C 二维 2A 3 B 3 C 4A 4 B 4 C 4d 4 E 如上所述,有几个ID与不同的代码值关联。我需要的结果如下 身份证号码 一维 1 E 2 B 2 C 2e 3A 三维 3 E ID 4不应返回任何内容,因为它包含所有可能的代码(在本例中为A、B、C、D、E)请尝试此操作oracle中的Sql从其不同的值中查找缺少的记录,sql,oracle,Sql,Oracle,很抱歉,这个不起作用。。。也许我应该早点澄清。值A、B、C、D等。。。是表中代码的不同值。表中有数百个ID,每个ID可以有一到多个代码值。在上面的示例中,假设表A中有5个不同的代码值。有3个ID,每个ID在表A中关联如下 身份证号码 1A 1b 1 C 二维 2A 3 B 3 C 4A 4 B 4 C 4d 4 E 如上所述,有几个ID与不同的代码值关联。我需要的结果如下 身份证号码 一维 1 E 2 B 2 C 2e 3A 三维 3 E ID 4不应返回任何内容,因为它包含所有可能的代码(在本
select T2.ID, T1.missing_value
from
(
select 'A' missing_value from dual UNION
select 'B' from dual UNION
select 'C' from dual UNION
select 'D' from dual UNION
select 'E' from dual
) T1,
(
select distinct id from MYTABLE
) T2
WHERE NOT EXISTS
(
SELECT * FROM MYTABLE M WHERE M.CODE = T1.missing_value and M.ID = T2.ID
)
ORDER BY T2.ID, T1.missing_value
首先,您应该在不同的子查询中为这两个列取不同的值,然后交叉连接它们-这将提供所有可能的组合, 最后排除已经存在的组合
select *
from
(select distinct ID
from your_table) ytI, /* this sub-query will return all possible ID */
(select distinct code
from your_table) ytc /* this sub-query will return all possible code */
where (ytI.ID,ytc.Code) /* there will be cross-join as there are no join condition between first two tables*/
not in /* exclude those records which are already present */
(select id,code
from your_table yt_i)
列表(A、B、C、D、E)从何而来?因此您有一个主表,其中说明哪个ID分配了多少代码。如果是这样的话,请在你的问题中分享它。你可以添加一些数据并展示你是如何尝试sqlfiddle的。com@srini如果它值得,请投票/接受它作为答案。