无法找出双重否定查询(mysql)的错误所在
我正在尝试查找至少具有属性id 7所具有的所有仪表类型的属性(PID)。我正在尝试使用双重否定查询,但我一直在出错,我想我很快就能做到这一点(我发现双重否定在概念上很困难)有人能帮我找到我的错误吗无法找出双重否定查询(mysql)的错误所在,mysql,database,Mysql,Database,我正在尝试查找至少具有属性id 7所具有的所有仪表类型的属性(PID)。我正在尝试使用双重否定查询,但我一直在出错,我想我很快就能做到这一点(我发现双重否定在概念上很困难)有人能帮我找到我的错误吗 选择DISTINCTpid 从PROPERTYMETERX 不存在的地方 (选择* 从PROPERTYMETERY 其中pid=7) 而且不存在 (选择* 从PROPERTYMETER 其中,pid=X.pid 和metertype=Y.metertype) 我只使用了PROPERTYMETER表,
选择DISTINCTpid
从PROPERTYMETER
X
不存在的地方
(选择*
从PROPERTYMETER
Y
其中pid=7)
而且不存在
(选择*
从PROPERTYMETER
其中,pid=X.pid
和metertype
=Y.metertype)
我只使用了PROPERTYMETER表,但是通过连接PROPERTYMETER和METERTYPE,也许有更好的方法来实现这一点
-多亏了一种概念上的方法是将每个
pid
仪表值组内部连接到一个仅包含pid=7
仪表值的表中。然后按pid
进行聚合,并断言每个pid
组的不同仪表类型数与pid=7
的仪表类型数匹配
SELECT
p1.pid
FROM PROPERTYMETER p1
INNER JOIN PROPERTYMETER p2
ON p1.metertype = p2.metertype AND
p2.pid = 7
GROUP BY
p1.pid
HAVING
COUNT(DISTINCT p1.metertype) = (SELECT COUNT(DISTINCT metertype)
FROM PROPERTYMETER WHERE pid = 7)
输出:
仅返回pid
7和9
此处演示:
请显示样本数据。已编辑@TimBiegeleisen