我试图在桌子上显示不同的记录,但不起作用。
这里我有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;
仍然无法获得正确的输出
答案 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;