如果表1中存在显示表2,则在SQL

时间:2017-01-26 06:59:46

标签: sql oracle11g

我试图在桌子上显示不同的记录,但不起作用。

这里我有ALL_RECORD表

ID    NAME    STUD_ID    INFO
 1     Jose    123456    abcd
 1     Jose    <null>    abcd
 2     Ann     123457    abcde
 2     Ann     <null>    abcde
 3     Kyle    123444    abcdq
 4     Cynt    <null>    abcdw
 4     Cynt    111112    abcdw

我的ALL_RECORD表值是从我的RECORD1和RECORD2

中插入的

RECORD1表

ID    NAME    STUD_ID    INFO
 1     Jose    <null>    abcd
 2     Ann     <null>    abcde
 4     Cynt    <null>    abcdw

RECORD2表

ID    NAME    STUD_ID    INFO
 1     Jose    123456    abcd
 2     Ann     123457    abcde
 3     Kyle    123444    abcdq
 4     Cynt    111112    abcd

我想要展示的内容

ID    NAME    STUD_ID    INFO
 1     Jose    <null>    abcd
 2     Ann     <null>    abcde
 3     Kyle    123444    abcdq
 4     Cynt    <null>    abcdw

请注意身份证号码。 3.

我的测试查询1

select distinct(id), name, stud_id, info from ALL_RECORD;

我的测试查询2

select * from ALL_RECORD where id is null;

我的测试查询3

select * from ALL_RECORD where id is null and id in (select * from record2) group by id;

仍然无法获得正确的输出

2 个答案:

答案 0 :(得分:0)

您可以使用窗口功能执行此操作:

select id, name, stud_id, info
from (
   select id, name,stud_id,info, 
          row_number() over (partition by id,name order by stud_id nulls first) as rn
   from all_record
) t
where rn = 1;

row_number()根据order by子句指定的排序条件分配序号。您希望null值具有更高的优先级&#34;然后是一个非空值,您需要使用nulls first为它们提供行号1.请注意,如果id,name组合有多个行,stud_id为空值这选择了任意一个。

答案 1 :(得分:0)

您想要显示所有table2记录以及那些在table2中找不到ID的table1记录。

select id, name, stud_id, info from table2
union all
select id, name, stud_id, info from table1 where id not in (select id from table2)
order by id;