【问题标题】:Remove duplicates from result in sql从 sql 中的结果中删除重复项
【发布时间】:2021-07-13 11:01:39
【问题描述】:

我在java项目中有以下sql:

select distinct * from drivers inner join licenses on  drivers.user_id=licenses.issuer_id
        inner join users on drivers.user_id=users.id 
        where (licenses.state='ISSUED' or drivers.status='WAITING')
        and users.is_deleted=false 

结果 i 数据库如下所示:

而且我只想得到一个结果而不是两个重复的结果。 我该怎么做?

【问题讨论】:

  • 你要哪一个?
  • 样本数据最好显示为formatted text。请参阅here,了解有关如何创建漂亮表格的一些提示。
  • 您需要提供样本数据、期望的结果以及您想要完成的任务的清晰说明。

标签: sql postgresql duplicates


【解决方案1】:

选择时枚举字段名称,对值为空的字段使用 COALESCE。

【讨论】:

    【解决方案2】:

    通常您不会使用 *(所有列)进行不同的查询,因为这意味着如果一列具有相同的值而其余的不是,它将被视为不同的行。所以你必须只区分你想要的列,然后获取数据

    【讨论】:

    • 好的,所以不可能只在一个 sql 中做到这一点,对吧? “所以你必须只区分你想要的列,然后获取数据”-是的,我只能区分一列,我会收到我需要的 id,但我想获取所有数据(不仅仅是 id)
    【解决方案3】:

    解决方案 1 - 那是因为其中一个数据具有重复值写入不同的关键字,只有你想要这样的列

    Select distinct id, distinct  creation_date, distinct  modification_date from 
    YourTable
    

    解决方案 2 - 仅在 ID 上应用 distinct,一旦获得 id,您就可以在查询中使用所有数据

    select * from yourtable where id in (select distinct id from drivers inner join 
     licenses 
     on drivers.user_id=licenses.issuer_id
     inner join users on drivers.user_id=users.id 
     where (licenses.state='ISSUED' or drivers.status='WAITING')
     and users.is_deleted=false )
    

    【讨论】:

      【解决方案4】:

      我怀疑你想要这样的left joins:

      select *
      from users u left join
           drivers d
           on d.user_id = u.id and d.status = 'WAITING' left join
           licenses l
           on d.user_id = l.issuer_id and l.state = 'ISSUED'
      where u.is_deleted = false and
            (d.user_id is not null or l.issuer_id is not null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 2015-12-19
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多