SQL:当且仅当子项具有某个属性时才获取父项

时间:2013-10-22 00:29:48

标签: mysql sql sql-server oracle

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

我想返回一个资源,其中所有资源的状态='1',或者根本没有。

到目前为止,我有这个:

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

如果我收回记录,我怎么知道这是该资产的所有资源(即它不是一个子集)

(这个数据是伪造的,我的真实查询有点复杂)。

我知道这是一个连接查询,但不知道如何。

感谢您的帮助,

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

1 个答案:

答案 0 :(得分:6)

使用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'
)