2010-08-20 15 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。