Sql 返回(1,2,3,3,3,1)条款中所有的where IN,在IN条件中有两个副本

Sql 返回(1,2,3,3,3,1)条款中所有的where IN,在IN条件中有两个副本,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我需要返回以下内容的所有值:选择(1,2,3,3,1)中的…位置 我有一个具有唯一ID的表。我有以下疑问: Select * From Table_1 Where ID IN (1,2,3,3,3,1); 到目前为止,我只返回3条唯一值的记录(1,2,3) 我想退回6张唱片 我需要得到图片上显示的结果集 您不能使用操作符中的。您可以创建临时表并联接: CREATE TABLE #TempIDs ( ID int ) INSERT INTO #TempIDs (1) INSERT INTO #

我需要返回以下内容的所有值:选择(1,2,3,3,1)中的…位置

我有一个具有唯一ID的表。我有以下疑问:

Select * From Table_1 Where ID IN (1,2,3,3,3,1);
到目前为止,我只返回3条唯一值的记录(1,2,3)

我想退回6张唱片

我需要得到图片上显示的结果集


您不能使用操作符中的
。您可以创建临时表并联接:

CREATE TABLE #TempIDs
(
ID int
)

INSERT INTO #TempIDs (1)
INSERT INTO #TempIDs (2)
INSERT INTO #TempIDs (3)
INSERT INTO #TempIDs (3)
INSERT INTO #TempIDs (3)
INSERT INTO #TempIDs (1)

Select Table_1.* From Table_1
INNER JOIN #TempIDs t n Table_1.ID = t.ID;
另一个(可能更丑陋)的选择是进行
联合

Select * From Table_1 Where ID = 1
UNION ALL
Select * From Table_1 Where ID = 2
UNION ALL
Select * From Table_1 Where ID = 3
UNION ALL
Select * From Table_1 Where ID = 3
UNION ALL
Select * From Table_1 Where ID = 3
UNION ALL
Select * From Table_1 Where ID = 1

您不能使用
中的
条件执行此操作,因为
中的
将您的项目视为一个集合(即确保唯一性)

您可以通过连接到一个
UNION ALL
来生成所需的结果,如下所示:

SELECT t.*
FROM Table_1 t
JOIN ( -- This is your "IN" list
          SELECT 1 AS ID
UNION ALL SELECT 2 AS ID
UNION ALL SELECT 3 AS ID
UNION ALL SELECT 3 AS ID
UNION ALL SELECT 3 AS ID
UNION ALL SELECT 1 AS ID
) x ON x.ID = t.ID

你能做到。但不是和你在一起

Select 
src.* 
From Table_1 src
inner join (
 select
ID,
myorder
from (values
 (1,0),
(2,1),
(3,2),
(3,3),
(3,4),
(1,5)
) x (ID,myorder)
) T ON
T.ID = src.ID
order by T.myorder

请记住,如果要对数据集进行排序,则必须提供order by子句。

您说您有一个唯一的ID,但您的表有三条ID为3的记录。所以它不是唯一的。您在问题中提到的查询将返回您需要的所有数据。顺便说一句,你不需要在括号内有重复的值。你说你有一个
唯一的
ID,但是你有多个具有相同ID的记录。根据其定义,这不是唯一的。很抱歉造成混淆。请看更新的图片。@enigma6205:我认为“鲍勃”应该显示两次,“约翰”只显示一次,对吗?