我有以下3个表格:
TestGroup
RecordNumber(pk)
测试
RecordNumber(pk)
TestGroupRecordNumber(fk)
结果
RecordNumber(pk)
TestRecordNumber(fk)
基本上,TestGroup是一组测试,每个测试都包含许多结果。我想选择结果少于X的所有TestGroup。什么查询会实现这个目标?
答案 0 :(得分:6)
您应该使用拥有子句:
SELECT count(1), tg.recordNumber FROM testgroup tg
LEFT JOIN test t ON t.TestGRoupRecordNumber = tg.recordNumber
LEFT JOIN result r ON r.testRecordNumber = t.recordNumber
GROUP by tg.recordNumber
HAVING count(1) < 10
答案 1 :(得分:3)
您只需使用GROUP BY
和HAVING
:
SELECT TG.RecordNumber
FROM TestGroup TG
LEFT JOIN Test T ON TG.RecordNumber = T.TestGroupRecordNumber
LEFT JOIN Result R ON T.RecordNumber = R.TestRecordNumber
GROUP BY TG.RecordNumber
HAVING COUNT(R.TestRecordNumber) < X
如果测试组没有结果或没有测试,我也会使用LEFT JOIN
。