问题是"找到至少具有所有仪表类型的属性(pids),因为属性ID 7具有"
这是一张包含id' s和metertypes的表格,名为p__METER
这就是我认为是正确的,但它不会返回具有两个值的pid,它还返回一个只有一个值以及原始属性的pid。有什么想法吗?这种双重否定的东西很难理解。
SELECT DISTINCT pid
FROM property__PROPERTYMETER X
WHERE NOT EXISTS
(SELECT * FROM property__PROPERTYMETER Y
WHERE pid = 7
AND NOT EXISTS
(SELECT * FROM property__PROPERTYMETER
WHERE metertype = X.metertype
AND pid = Y.pid ))
答案 0 :(得分:2)
最里面的查询应该验证最外层属性是否具有middle属性的所有metertype。在您的示例中,它验证中间属性没有外部属性的metertype。
所以你内心深处有一个最里面的查询。变化:
WHERE metertype = X.metertype
AND pid = X.pid ))
要:
WHERE metertype = Y.metertype
AND pid = X.pid ))
答案 1 :(得分:2)
您需要一个双重嵌套查询
更好的说法 “找到不属于任何属性ID 7所具有的仪表类型的属性(pids)” 或
“查找属性(pids),使得不存在属于pid 7且不属于此pid的metertype。”
Select DISTINCT pid -- outer query: "Show all pids ... "
From property_PROPERTYMETER X
Where not Exists -- mid-query: "Where there is no pid:7 metertype ..."
(Select * From property_PROPERTYMETER y
Where metertype = X.metertype
And pid = 7
And Not exists
(Select * from property_PROPERTYMETER -- inner Qry: "..not also in this pid."
Where metertype = y.metertype
And pid = x.pid))
答案 2 :(得分:0)
左连接怎么样?
SELECT DISTINCT pid
FROM property__PROPERTYMETER X
WHERE NOT EXISTS
(SELECT * FROM property__PROPERTYMETER Y
LEFT JOIN property__PROPERTYMETER Z
ON Z.metertype = Y.metertype AND Z.pid = X.pid
WHERE Y.pid = 7 AND Z.pid is null
)