这是一个难以理解的问题,但在解释一下时非常简单。
我有两个表:Standard_Test {StandardID int,TestID int}和Test {TestID int}
Standard_Test:http://i51.tinypic.com/2u60ket.png
测试:http://i51.tinypic.com/2bbqxj.png
我需要选择一个StandardID列表,其中包含与Test关联的TestID中的所有TestID。在上面的示例中,此查询仅选择StandardID 5& 6因为它们都有TestID的1,2,3(所有TestID来自Test)。
听起来很简单,但我无法提出正确的查询。先谢谢!
答案 0 :(得分:2)
你可以试试这个,它应该有效:
SELECT DISTINCT st.StandardId
FROM Standard_Test st JOIN Test t
ON st.TestId = t.TestId
GROUP BY st.StandardId
HAVING COUNT(st.TestId) = (SELECT COUNT(TestId) FROM Test)
答案 1 :(得分:1)
这适用于Test中的任意数量的行。 (它假设一个给定的TestId只在Test中出现一次 - 它是主键,对吗?)
SELECT st.StandardID
from Standard_Test st
inner join Test te
on te.TestID = st.TestID
group by st.StandardID
having count(te.TestId) = (select count(*) from Test)
答案 2 :(得分:1)
这是关系师。谷歌的那个词你应该找到你需要的所有信息。
答案 3 :(得分:0)
以下代码将起作用以查找您的要求。 看看这个。 这里Tab1 = Standard_Test和tab2 = Test
宣布@Test Int
声明@Tab表 ( 站在int )
声明@Cur Cursor 设置@Cur = CURSOR For 从tab1中选择standardID 按标准ID分组
打开@Cur 获取下一个 从@Cur到@Test
WHILE @@FETCH_STATUS = 0
Begin
If Exists (Select 1
From tab2
Where estID not in (Select testId From tab1 Where StandardID = @Test))
Begin
insert into @Tab
values(@Test)
End
Fetch Next
From @Cur into @Test
End
关闭@Cur DEALLOCATE @Cur
选择*来自@Tab