检索具有一对多关系的表

时间:2017-12-09 20:22:06

标签: sql database mysqli one-to-many

我有两张桌子:

Detection{
    DetectionId int
    ....
    ...
    ...
}

DetectionInfo{
    DetectionId int
    Name char
    val char
}

这两个表之间存在一对多的关系。

我想检索BOTH val =“DOWN”和val =“Blue”

的检测结果

这是我的解决方案:

SELECT * FROM Detection a WHERE a.DetectionId IN 
    (SELECT c.DetectionId FROM DetectionInfo c where c.val = "DOWN" and c.Detection IN
          (SELECT d.DetectionId FROM DetectionInfo d 
              WHERE d.val = "Blue"))

有更好(有效)的方法吗?

1 个答案:

答案 0 :(得分:1)

以下是获取ID的一种方法:

select detectionid
from detectioninfo
where val in ('DOWN', 'BLUE')
group by detectionid
having count(distinct val) = 2;

如果需要,您可以使用joininexistsdetection表中获取其他信息。