我有一个像这样的父表
ID | ParentTestID | TestID
----------------------------------------
1 | 10 | 15
2 | 10 | 25
3 | 10 | 35
第二张表
ID | TestID | TestName | LanguageID
-----------------------------------------
1 | 15 | Test1 | 8
2 | 15 | Test2 | 3
3 | 15 | Test3 | 1
4 | 25 | Test1 | 5
5 | 25 | Test2 | 3
6 | 25 | Test3 | 4
7 | 35 | Test1 | 3
8 | 35 | Test2 | 8
9 | 35 | Test3 | 9
当我只在第一个表上知道ParentTestID时,我的方案是从第二个表中找到公共语言ID
这意味着如果我知道父TestID 10,结果将为3 ,因为10岁以下的所有testID都具有公共语言ID 3
父ID下的testID数量也是不可预测的。它不会只是3。
我正在寻找没有光标或类似复杂情况的查询。
答案 0 :(得分:3)
SELECT b.LanguageID
FROM firstTable a
INNER JOIN secondTable b
ON a.TestID = b.TestID
WHERE a.ParentTestID = 10
GROUP BY b.languageID
HAVING COUNT(DISTINCT b.TestID) =
(
SELECT COUNT(c.testid)
FROM firsttable c
WHERE c.parenttestid = 10
)
在HAVING COUNT(DISTINCT b.TestID)
行中,如果DISTINCT
对于每个LanguageID
都是唯一的,则不需要使用TestID
关键字。
答案 1 :(得分:0)
假设每个tests
只有3 parenttestid
,您可以尝试以下查询:
select distinct languageid
from child
where testid in (select testid from parent where parenttestid = 10)
group by languageid having count(*) > 2
如果计数未修复,则此查询将起作用:
select distinct languageid
from child
where testid in (select testid from parent where parenttestid = 10)
group by languageid
having count(testid) = (select count(testid) from parent where parenttestid = 10)