【问题标题】:Return only unique value SQL只返回唯一值 SQL
【发布时间】:2020-11-23 16:58:16
【问题描述】:

我正在尝试从 SQL 查询创建一个 csv 文件。 但是在写这个查询的时候遇到了一个问题,我尝试在valueA = valueB的情况下检索所有tableA ID,但是在tableB中valueB多次存在的情况下,我不想检索tableA ID .

SELECT tableA.id, tableB.id FROM tableA INNER JOIN tableB ON tableA.valueA = tableB.valueB

目前我的结果如下所示:
表A.id;表B.id
------------------------------------
1;100
2;123
5;148
5;256
7;130

因此对于本示例,ID 5 必须没有值并得到以下结果:
表A.id;表B.id
------------------------------------
1;100
2;123
7;130

提前感谢您的帮助!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你可以这样做:

    select * from tableA inner join (
    select * from tableB where valueB in (
    select valueB  from tableB group by valueB having count(valueB) = 1 ) 
    ) tableBB
    on tableA.valueA = tableBB.valueB
    

    想法是先从tableB中过滤掉多行id,然后和tableA连接起来。

    【讨论】:

      【解决方案2】:

      这是一个易于阅读的答案,但对于大型表可能会有点慢:

      SELECT tableA.id, tableB.id 
      FROM tableA 
      INNER JOIN tableB 
      ON tableA.valueA = tableB.valueB
      where (select count(1) from tableB b2 where b2.valueB = tableB.valueB) = 1
      

      还有一个更复杂的版本,它只查询 tableB 一次。

      SELECT tableA.id, tableB.id 
      FROM tableA 
      INNER JOIN (select tableB.*, count(1) over (partition by valueB) as c from tableB) tableB 
      ON tableA.valueA = tableB.valueB
       AND tableB.c = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-19
        • 2014-10-17
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多