我有两张桌子,一张是"批次"另一个是" BatchDetails"。 批处理具有BatchId,BatchName和TechId等列。 BatchDetails包含BatchDetailsId,BatchId和SubTechID等列。
BatchDetails表通过" BatchId"与Batch表连接。 " Batch"之间存在一对多关系。和" BatchDetail"表。 一批在BatchDetails表中有多个条目。
现在我想从Batch中选择所有BatchName,其中TechId = 1并且对应于该BatchName,BatchDetails表有SubTechId = 1和SubTechId = 2.
答案 0 :(得分:2)
有几种方法可以返回指定的结果。
假设规范是从batch
返回仅行,batchdetails
中至少有两个关联行,并且至少有一个关联行为{{ 1}}和至少一个subtechid=1
对于MySQL:
subtechid=2
使用 SELECT b.batchname
FROM batch b
JOIN batchdetail d1
ON d1.batchid = b.batchid
AND d1.subtechid = 1
JOIN batchdetail d2
ON d2.batchid = b.batchid
AND d2.subtechid = 2
WHERE b.techid = 1
GROUP BY b.batchid
ORDER BY b.batchname
谓词也可以得到相同的结果:
EXISTS
或者,计算不同的subtechid值并与常量
进行比较 SELECT b.batchname
FROM batch b
WHERE b.techid = 1
AND EXISTS ( SELECT 1
FROM batchdetail d1
WHERE d1.batchid = b.batchid
AND d1.subtechid = 1
)
AND EXISTS ( SELECT 1
FROM batchdetail d2
WHERE d2.batchid = b.batchid
AND d2.subtechid = 2
)
ORDER BY b.batchname
还有其他几种查询模式......