我希望能够遍历一个列表,并返回一个单行,所有列表中的元素都匹配。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