2017-05-22 22 views
1

私は深刻なSQLのnoobだから、どんな助けもありがとう。私はので、私は私がこれまで持っているものにレイアウトます何をしようとしているにも説明に苦労しています:SQLは列から選択します。

DECLARE @UserIDInt table (ID int); 

INSERT into @UserIDInt 
    SELECT UserId 
    FROM [LcsCDR].[dbo].[Users] 
    WHERE [LcsCDR].[dbo].[Users].[UserUri] LIKE '%example'; 

SELECT * 
FROM [LcsCDR].[dbo].[SessionDetails] 
WHERE [LcsCDR].[dbo].[SessionDetails].[User1Id] = @UserIDInt; 


"DECLARE @UserIDInt table (ID int);" 

これは、「ID」と呼ばれる列を持つ私の変数を作成します

INSERT into @UserIDInt 
    SELECT UserId 
    FROM [LcsCDR].[dbo].[Users] 
    WHERE [LcsCDR].[dbo].[Users].[UserUri] LIKE '%example'; 

これは私が失われています場所ですWHERE文は

SELECT * 
FROM [LcsCDR].[dbo].[SessionDetails] 
WHERE [LcsCDR].[dbo].[SessionDetails].[User1Id] = @UserIDInt; 

一致するか否かに基づいて、ID列に数値を追加します。私はから列[LcsCDR].[dbo].[SessionDetails].[User1Id]がすべて私の変数内のものと一致するなら、すべての行を返そうとしています。私が思っている問題は、SQLは変数の列内で複数の値を見つけることができないということです。基本的に、変数@UserIDIntのID列には数値の束が含まれます。

[LcsCDR].[dbo].[SessionDetails].[User1Id]@UserIDInt.ID列内のものと一致する場合、最後のSELECT文を実行してSQLにすべての結果を返すにはどうすればよいですか?

私はひどくそれを説明している場合、私は、SQL Serverに2014

謝罪を使用しています。

select sd.* 
from [lcscdr].[dbo].[sessiondetails] sd 
    inner join @useridint i 
    on i.id = sd.user1id; 

またはexists()を使用して::

select sd.* 
from [lcscdr].[dbo].[sessiondetails] sd 
where exists (
    select 1 
    from @useridint i 
    where i.id = sd.user1id 
); 

またはin()を使用して:質問:) inner joinを使用して

+0

ヒント: 'Exists' – Sami

+0

あなたは答えを持っていますが、私は別のコメントを追加します。一時テーブルまたはテーブル変数を作成しないでください。 @SqlZimと同じ戦略を使用するだけで、実際のソーステーブルを直接クエリできます。結果セットを一時テーブルにダンプするのは、それが後続のクエリの結果セットをフィルタリングする役割を果たすだけであれば、一般的に利点はありません。盲目的にデザインパターンに従わないでください。 – SMor

答えて

1

を依頼する方法が他にわからない

select sd.* 
from [lcscdr].[dbo].[sessiondetails] sd 
where sd.user1id in (
    select id 
    from @useridint i 
); 

rextesterデモ:http://rextester.com/UVCB28056

+0

お返事ありがとうございます!しかし、私が作成したテーブル変数にデータが追加されていることを確認したにもかかわらず、上記のすべてが結果を返さないようです。私はあなたのものと私の最終的なSELECTステートメントを置き換えるだけで、それはすべて正常に実行されているようです(結果が返されません)。 – Grayson

+2

@Grayson他の制限要因(where句の他の項目など)のため、テーブル変数のIDがデータセットに存在しない可能性があります – scsimon

+0

"SELECT * FROM @UserIDInt;"両方の行に数字がある2行が返されます。私の変数にデータがあることを示すのではないでしょうか? 編集:私はそれを修正しました。私はばかだと間違った情報を探していた。あなたのスクリプトは絶対に正しいです。援助のおかげでありがとう! – Grayson

0

使用EXISTS

SELECT T1.* 
FROM [lcscdr].[dbo].[sessiondetails] T1 WHERE EXISTS (
    SELECT 1 
    FROM @useridint T2 
    WHERE T2.id = T1.user1id 
); 
関連する問題