2010-08-20 18 views
0

我希望能夠遍歷一個列表,並返回一個單行,所有列表中的元素都匹配。SQL - 使用連接到一個列表傳遞給查找TBL

例如

免得說我的ID的名單是1,2,3我想寫一個SQL statment,將做以下(不破壞)。

SELECT ID1 FROM TBL 其中0 = 0 和ID2 = 1 和ID2 = 2 和ID2 = 3

這是可能的?

在此先感謝

+1

如何ID2二者均是1 _AND_ 2 _AND_ 3同時???你確定你不是指或? – 2010-08-20 13:47:05

+0

你可以刪除0 = 0 coze其始終爲真 – domiSchenk 2010-08-20 13:50:41

+0

「在列表上循環」:列表是什麼?這個清單在哪裏存儲?你能舉一個有效的例子來證明你想要的是什麼嗎? – 2010-08-20 13:56:15

回答

3

你的意思是你希望所有id1記錄其存在匹配的id2=1和匹配id2=2和匹配id2=3

WITH tbl As 
(
SELECT 1 AS id1, 1 AS id2 UNION ALL 
SELECT 1 AS id1, 2 AS id2 UNION ALL 
SELECT 1 AS id1, 3 AS id2 UNION ALL 
SELECT 1 AS id1, 4 AS id2 UNION ALL 
SELECT 2 AS id1, 1 AS id2 UNION ALL 
SELECT 2 AS id1, 2 AS id2 UNION ALL 
SELECT 3 AS id1, 1 AS id2 UNION ALL 
SELECT 3 AS id1, 2 AS id2 UNION ALL 
SELECT 3 AS id1, 3 AS id2 
) 
SELECT id1 
FROM tbl 
WHERE id2 IN (1,2,3) 
GROUP BY id1 
HAVING COUNT(DISTINCT id2) = 3 

返回

id1 
----------- 
1 
3 

是你需要什麼?

+0

+1這是一個很好的猜測,什麼OP可能意味着。 – 2010-08-20 13:48:29

+0

嘿,夥計們,感謝您的快速反應。 是的,所以必須有三排。這看起來有點像這樣 ID1/ID2 1/1 /2 三分之一 我試着去得到的結果爲eq 1(ID1的值) – James 2010-08-20 14:00:49

+0

@詹姆斯 - 見我的編輯。這是做你需要的嗎? – 2010-08-20 14:09:41

2

這裏沒有任何意義。你可能想使用OR:id2 = 1 OR id2 = 2 OR id2 = 3甚至更​​好:

SELECT id1 FROM TBL WHERE id2 IN (1,2,3) 
+0

這將是'SELECT ID1 FROM TBL WHERE 0 = 0和ID2 = 1 OR ID2 = 2 OR ID2 = 3' – 2010-08-20 13:48:32

+0

@詹姆斯柯倫:將0 = 0是沒有必要的。 – 2010-08-20 13:49:27

+0

+1這是一個同樣可行的猜測! – 2010-08-20 13:50:27

1

第三種猜測的基礎上,問題的標題 - 如果值列表是在第二個表,查詢可以被寫入到從根據第一表連接到第二表中選擇的價值觀 - 像這樣:

SELECT id1 FROM TBL T1 
join TBL2 T2 on T1.id2 = T2.id 

當然,在這個例子中,TBL2只需要id列中的值1,2和3。