我希望能夠遍歷一個列表,並返回一個單行,所有列表中的元素都匹配。SQL - 使用連接到一個列表傳遞給查找TBL
例如
免得說我的ID的名單是1,2,3我想寫一個SQL statment,將做以下(不破壞)。
SELECT ID1 FROM TBL 其中0 = 0 和ID2 = 1 和ID2 = 2 和ID2 = 3
這是可能的?
在此先感謝
我希望能夠遍歷一個列表,並返回一個單行,所有列表中的元素都匹配。SQL - 使用連接到一個列表傳遞給查找TBL
例如
免得說我的ID的名單是1,2,3我想寫一個SQL statment,將做以下(不破壞)。
SELECT ID1 FROM TBL 其中0 = 0 和ID2 = 1 和ID2 = 2 和ID2 = 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
是你需要什麼?
+1這是一個很好的猜測,什麼OP可能意味着。 – 2010-08-20 13:48:29
嘿,夥計們,感謝您的快速反應。 是的,所以必須有三排。這看起來有點像這樣 ID1/ID2 1/1 /2 三分之一 我試着去得到的結果爲eq 1(ID1的值) – James 2010-08-20 14:00:49
@詹姆斯 - 見我的編輯。這是做你需要的嗎? – 2010-08-20 14:09:41
這裏沒有任何意義。你可能想使用OR:id2 = 1 OR id2 = 2 OR id2 = 3
甚至更好:
SELECT id1 FROM TBL WHERE id2 IN (1,2,3)
這將是'SELECT ID1 FROM TBL WHERE 0 = 0和ID2 = 1 OR ID2 = 2 OR ID2 = 3' – 2010-08-20 13:48:32
@詹姆斯柯倫:將0 = 0是沒有必要的。 – 2010-08-20 13:49:27
+1這是一個同樣可行的猜測! – 2010-08-20 13:50:27
第三種猜測的基礎上,問題的標題 - 如果值列表是在第二個表,查詢可以被寫入到從根據第一表連接到第二表中選擇的價值觀 - 像這樣:
SELECT id1 FROM TBL T1
join TBL2 T2 on T1.id2 = T2.id
當然,在這個例子中,TBL2只需要id列中的值1,2和3。
如何ID2二者均是1 _AND_ 2 _AND_ 3同時???你確定你不是指或? – 2010-08-20 13:47:05
你可以刪除0 = 0 coze其始終爲真 – domiSchenk 2010-08-20 13:50:41
「在列表上循環」:列表是什麼?這個清單在哪裏存儲?你能舉一個有效的例子來證明你想要的是什麼嗎? – 2010-08-20 13:56:15