我有实验运行(runId),每个运行都有任何数量的传感器(sensorId)与它们相关。考虑到这一点,我有一个RS表来加入这两个:

==========
RS
==========
runId, sensorId

因此,如果runId=1的运行包含sensorId=1、sensorId=6、sensorId=8的传感器,那么RS表中会有3个条目:
(运行ID=1,传感器ID=1)
(运行ID=1,传感器ID=6)
(运行ID=1,传感器ID=8)
这真的是我返回所有有传感器{11,13,15}的实验运行的方式吗?据我所读,我似乎想要一个嵌套的散列连接。。。会发生这种事吗?
SELECT a.runId
FROM rs a, rs b, rs c
WHERE
a.runId=b.runId AND
b.runId=c.runId AND
a.sensorId=11 AND
a.sensorId=13 AND
b.sensorId=15

为了澄清,我只想返回带有传感器11、13和15的实验运行。

最佳答案

假设runId, sensorIdrs表中是唯一的,这将找到所有3个runIds的sensorIds:

SELECT runId, COUNT(c) ct
FROM rs
WHERE sensorId IN (11, 13, 15)
GROUP BY runId
HAVING ct = 3

10-04 23:29