2016-04-11 14 views
0

すべての値を返す必要があります:select ... IN(1,2,3,3 、3,1)IN条件で重複するIN(1,2,3,3,3,1)句のすべてを返します

私は一意のIDを持つテーブルを持っています。

Select * From Table_1 Where ID IN (1,2,3,3,3,1); 

これまでのところ、私は6つのレコードを返したい

ユニークな値(1,2,3)のためにのみ3レコードを返すよ:私は、次のクエリを持っています。

結果セットを画像に表示する必要があります。

enter image description here

+1

あなたは一意のIDを持っていますが、あなたのテーブルには3つのIDが3つのレコードがあります。それは一意ではありません。 – strickt01

+1

あなたの質問で言及した質問は、必要なすべてのデータを返します。ところで、括弧の中に重複した値を持つ必要はありません。 – FLICKER

+1

あなたは「一意の」IDを持っていますが、あなたは同じIDを持つ複数のレコードを持っています。それは、そのまさにその定義によって**ユニークではない**です。 – Siyual

答えて

0

INのようにあなたの項目を扱いますので、あなたは、IN条件を使用してこれを行うことはできませんセット(すなわち、一意性を保証する)。

あなたはこのように、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 
1

あなたはINオペレータでこれを行うことはできません。あなたは一時テーブルを作成し、参加することができます:

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; 

別の(多分醜い)オプションはUNIONを行うことです。

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 
0

あなたはそれを行うことができます。しかしINではそうではありません。

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句を指定する必要があります。