【问题标题】:SQL: Get parent if and only if children have a certain propertySQL:当且仅当子项具有特定属性时获取父项
【发布时间】:2013-10-30 16:28:05
【问题描述】:

我有一个资产表,资源表中可以有一个或多个资源。

我想返回具有所有资源状态 = '1' 或根本没有的资产。

到目前为止,我有这个:

SELECT id FROM asset A JOIN resource R ON A.id = R.asset_id WHERE R.status = '1'. 

如果我得到一条记录,我怎么知道这是该资产拥有的所有资源(即它不是子集)

(此数据是捏造的,我的实际查询要复杂一些)。

我知道这是一个连接查询,但不知道怎么做。

感谢您的帮助,

编辑:标题有点误导。我的意思是说所有*孩子都有一定的财产。

【问题讨论】:

    标签: mysql sql sql-server oracle


    【解决方案1】:

    使用 NOT EXISTS 子句,如下所示:

    SELECT id 
    FROM asset A 
    INNER JOIN resource R ON A.id = R.asset_id 
    WHERE NOT EXISTS (
         /* Only return results if the asset has resources of all status = '1'  */
         SELECT 1 
         FROM Resources R2
         WHERE A.asset_id = R2.asset_id
         AND R2.status <> '1'
    )
    

    【讨论】:

    • +1 代表NOT EXISTS 而不是NOT IN(即使在这种情况下也不太重要)
    • 谢谢。现在很容易,我看着它。大声笑!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2013-05-27
    相关资源
    最近更新 更多