避免使用不存在SQL Oracle的列重复



如何使用不同的?

避免列的重复?

我想从表人不存在的表格关系中获取护照。它使用不存在。

,但我也想打印重叠(每次护照都没关系(。

这些是我的桌子:

关系

relID   passport  date
1       400000V   21/07/2019
2       400000V   31/02/2019
3       400000V   31/07/2011
4       342342X   31/12/2012
5       342342X   11/10/2011
6       823972O   31/07/2019

表人:

id   passport
1    342342X  
2    3333333T
3    1111111W

这是我想要的结果。

relID   passport
1       400000V     
6       823972O   

那是我的查询:

select 
     distinct passport
from RELATION
where not exists(select 1 from PERSON where PERSON.passport= RELATION.passport)

如果我添加了与选择的列有关,则我从Passport获得了重复值。

我只想与他们的一份重新获得独特的护照。

只需使用聚合:

select max(relid), passport
from relation
group by passport;

我不明白person表与问题有什么关系。

使用外部连接,检查加入表中的护照字段是否为null,这表明亲自存在的护照值:

SELECT r.PASSPORT, MIN(r.RELID)
  FROM RELATION r
  LEFT OUTER JOIN PERSON p
    ON p.PASSPORT = r.PASSPORT
  WHERE p.PASSPORT IS NULL
  GROUP BY r.PASSPORT
  ORDER BY r.PASSPORT

dbfiddle

使用min((

select min(relID),passport from table group by passport

按子句添加组应有所帮助: -

select min(relID), passport from RELATION where not exists(select 1 from PERSON where PERSON.passport= RELATION.passport) group by passport;

您必须使用两次,对于表格和表格关系:

select r.relid, r.passport
from RELATION r
where 
  not exists (
    select 1 from PERSON 
    where passport = r.passport
  ) and
  not exists (
    select 1 from RELATION 
    where passport = r.passport and "date" > r."date"
  ) 

如果每张护照的日期是唯一的。
参见演示。
结果:

> RELID | PASSPORT
> ----: | :-------
>     1 | 400000V 
>     6 | 823972O 

最新更新