【问题标题】:How to get only parent records which have all child records with same field value如何仅获取所有子记录具有相同字段值的父记录
【发布时间】:2022-01-22 17:02:39
【问题描述】:

文档表中的记录可以将“状态”字段的值设为“已验证”或“已请求”。我们如何仅选择所有相关“文档”记录的“状态”字段值为“已验证”而不是“已请求”的“邀请”记录

【问题讨论】:

    标签: postgresql inner-join


    【解决方案1】:

    您可以在case 表达式上使用count 来检查表中有多少“已验证”或“已请求”值:

    SELECT *
    FROM   documents i
    JOIN   (SELECT   id
                     COUNT(CASE status WHEN 'VERIFIED' THEN 1 END) AS count_verified,
                     COUNT(CASE status WHEN 'REQUESTED' THEN 1 END) AS count_requested
            FROM     invites
            GROUP BY id) i ON d.invite_id = i.id AND
                              count_verified > 0 AND
                              count_requested = 0
    

    【讨论】:

      【解决方案2】:

      我找到了一个带有 EXCEPT (MINUS) SQL 构造的解决方案

      (SELECT invites.id, invites.invited_by FROM invites 
      INNER JOIN documents
      ON invites.id=documents.invite_id
      GROUP BY (invites.id)
      )
      EXCEPT
      (SELECT invites.id, invites.invited_by  FROM invites 
      INNER JOIN documents
      ON invites.id=documents.invite_id
      WHERE documents.status='REQUESTED'
      GROUP BY (invites.id)
      )) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        相关资源
        最近更新 更多