有几种方法可以返回指定的结果。
假设规范是从batch
在batchdetails
具有至少两个相关联的行返回仅行,并且这些相关联的行中的至少一个是subtechid=1
和至少一个与subtechid=2
对于MySQL:
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
谓词同样的结果:
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
,或者让subtechid和比较不同值的数量为恒定
SELECT b.batchname
FROM batch b
JOIN batchdetail d
ON d.batchid = b.batchid
AND d.subtechid IN (1,2)
WHERE b.techid = 1
GROUP BY b.batchid
HAVING COUNT(DISTINCT d.subtechid) = 2
ORDER BY b.batchname
还有一些其他的查询模式...
为什么这个标签甲骨文*和* MySQL的? – tadman
贾斯汀,你想要查询每种查询语言,或者什么?请注明 – Fallenreaper