1

私は次の表を持っています

Table User
UserID         Name
1              Om
2              John
3              Kisan
4              Lisa
5              Karel

Table Game
Games          Players
Golf           1,3,5
Football       4

私はクエリを書きました:

Select UserId, 
Name from User 
Where UserID IN 
    (Select Players from Game where Games='Golf')

Result:
~~~~~~~
0 Rows

上記のクエリは結果を返しませんが、ステートメントで In 句の値を直接指定するとうまく機能します。

Select UserId, Name 
from User 
Where UserID IN (1,3,5)

Result:
~~~~~~~
UserID         Name
1              Om
3              Kisan
5              Karel
3 rows

ただし、Football の最初のクエリで条件を変更すると、次のようになります。

Select UserId, Name 
from User 
Where UserID IN 
    (Select Players 
     from Game 
     where Games='Football'). 

これにより、次の結果が返されます。

UserID         Name
4              Lisa
1 row

最初のクエリで正しい結果が返されるようにするにはどうすればよいですか?

私は間違った方向にいると思います。手伝ってください!

4

3 に答える 3

2

最初のクエリは次のように変換されます。

Select UserId, Name 
from User 
Where UserID IN (`1,3,5`)

2 番目のクエリのようなコンマ区切りのリストではなく、ID の文字列表現であることに注意してください。

Splitこのシナリオのために書かれた 多くの関数があります。

それらのいずれかを次のように利用できます。

DECLARE @PlayersCsv NVARCHAR(MAX)
Select @PlayersCsv = Players from Game where Games='Golf'

Select UserId, 
Name from User 
Where UserID IN 
    (Select Value FROM dbo.Split(@PlayersCsv, ','))
于 2013-10-10T17:03:19.497 に答える