Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-使用联接将列表传递给查找tbl_Sql_List_Join - Fatal编程技术网

SQL-使用联接将列表传递给查找tbl

SQL-使用联接将列表传递给查找tbl,sql,list,join,Sql,List,Join,我希望能够在列表上循环并返回一行,其中所有列表元素都已匹配 e、 g 为了避免说我的id列表是1,2,3,我想写一个SQL语句,它将执行以下操作(不中断) 选择id1 来自TBL 其中0=0 和id2=1 id2=2 id2=3 这可能吗 提前谢谢,这里没有任何意义。您可能希望使用或:id2=1或id2=2或id2=3或更适合于: SELECT id1 FROM TBL WHERE id2 IN (1,2,3) 这里没有任何意义。您可能希望使用或:id2=1或id2=2或id2=3或更适合于:

我希望能够在列表上循环并返回一行,其中所有列表元素都已匹配

e、 g

为了避免说我的id列表是1,2,3,我想写一个SQL语句,它将执行以下操作(不中断)

选择id1 来自TBL 其中0=0 和id2=1 id2=2 id2=3

这可能吗


提前谢谢,这里没有任何意义。您可能希望使用或:
id2=1或id2=2或id2=3
或更适合于:

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

这里没有任何意义。您可能希望使用或:
id2=1或id2=2或id2=3
或更适合于:

SELECT id1 FROM TBL WHERE id2 IN (1,2,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

这就是你所需要的吗?

你的意思是你想要所有的
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

这就是您所需要的吗?

根据问题的标题进行第三次猜测-如果值列表位于第二个表中,则可以编写查询以根据与第二个表的联接从第一个表中选择值-如下所示:

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

当然,在本例中,TBL2必须在id列中仅包含值1、2和3。

根据问题的标题进行第三次猜测-如果值列表位于第二个表中,则可以编写查询以根据与第二个表的联接从第一个表中选择值-如下所示:

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


当然,在本例中,TBL2必须在id列中仅包含值1、2和3。

id2如何同时为1、2和3???你确定你不是说或者?你可以删除0=0,因为它总是真实的“列表上的循环”:什么的列表?这个列表存储在哪里?你能举一个例子来说明你想要什么吗?这个列表是一个id号列表(例如1,2,3)。我想我要做的是查询表中的多行,这样我只能在表中有三行(在本例中)id1=1,第1行id2=1,第2行id2=2,第3行id2=3的情况下得到结果。Martin Smith的答案能解决您的问题吗?id2怎么能同时是1、2和3???你确定你不是说或者?你可以删除0=0,因为它总是真实的“列表上的循环”:什么的列表?这个列表存储在哪里?你能举一个例子来说明你想要什么吗?这个列表是一个id号列表(例如1,2,3)。我想我要做的是查询表中的多行,这样我只会在表中有(在本例中)行时得到结果三行,其中id1=1,第1行id2=1,第2行id2=2,第3行id2=3马丁·史密斯的答案能解决你的问题吗?那就是
从TBL中选择id1,其中0=0,id2=1,id2=2或id2=3
。@詹姆斯·科伦:0=0是没有必要的。我想说的是他特别想要“和”。你把它改成了“或”。@James Curran:这个问题显然有错误。唯一的问题是错误是什么。老实说,我认为Martin Smith的猜测比我的好,但只有OP知道他写问题时的想法。忽略他的SQL,阅读OP的文本。他显然想要某种形式的“和”。(我在考虑第二个多对一的表)那就是从TBL中选择id1,其中0=0,id2=1,id2=2或id2=3@James Curran:0=0是没有必要的。我想说的是他特别想要“和”。你把它改成了“或”。@James Curran:这个问题显然有错误。唯一的问题是错误是什么。老实说,我认为Martin Smith的猜测比我的好,但只有OP知道他写问题时的想法。忽略他的SQL,阅读OP的文本。他显然想要某种形式的“和”。(我正在考虑第二张多对一的桌子)嘿,伙计们,谢谢你们的快速回复。是的,所以必须有三排。这看起来有点像ID1/ID2 1/1 1/2 1/3,我试图得到等式1的结果(ID1的值)是的,这就是我需要的。我会试试看,然后告诉你。谢谢你的帮助,这不仅起作用,而且我也理解正在发生的事情。谢谢各位,谢谢你们的快速回复。是的,所以必须有三排。这看起来有点像ID1/ID2 1/1 1/2 1/3,我试图得到等式1的结果(ID1的值)是的,这就是我需要的。我会试试看,然后告诉你。谢谢你的帮助,这不仅起作用,而且我也理解正在发生的事情。谢谢