【问题标题】:Return parent ID if all children referencing the parent ID have selected value如果引用父 ID 的所有子代都具有选定的值,则返回父 ID
【发布时间】:2020-07-25 16:52:44
【问题描述】:

我在工作中遇到了一些奇怪的情况。我需要确定表中引用其父项的所有项目以及哪些项目具有一定的价值。例如

id  | parentID | fieldValue
---------------------------
123    null      null
  124    123       2
  125    123       2
126    null      null
  127    126       2
  128    126       1

在上面的例子中,如果我的子选择要搜索 fieldValue 为“2”的所有子项,我只希望返回 123 的 ID,因为 126 有一个值为 1 的子项。

目标是:

HasParentID 不为空,如果所有其他子项的字段值 = 2,则返回 parentID。

【问题讨论】:

    标签: sql select subquery


    【解决方案1】:

    您可以group by parentID 并在having 子句中设置条件:

    select parentID
    from tablename
    group by parentID
    having count(distinct fieldValue) = 1 and max(fieldValue) = '2'
    

    【讨论】:

      【解决方案2】:

      您可以使用NOT EXISTS 子句来检查parentID 除了2 之外没有fieldValue 的子代:

      SELECT DISTINCT parentID
      FROM data d1
      WHERE d1.fieldValue = 2
        AND d1.parentID IS NOT NULL
        AND NOT EXISTS (SELECT *
                        FROM data d2
                        WHERE d2.parentID = d1.parentID AND d2.fieldValue != 2)
      

      Demo on SQLFiddle

      【讨论】:

        【解决方案3】:

        你可以这样做

        SELECT DISTINCT parentID 
          FROM data
          WHERE fieldValue = 2
            AND parentID NOT IN 
              (SELECT parentId 
               FROM data
               WHERE fieldValue != 2)
        

        【讨论】:

          猜你喜欢
          • 2018-05-22
          • 2018-11-03
          • 1970-01-01
          • 2015-12-04
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 2014-08-06
          • 1970-01-01
          相关资源
          最近更新 更多