次のクエリがあります
SELECT s.s_id, s.t_id, c.c_id, c.desc, sm.user_id
FROM s s
INNER JOIN c c
ON s.c_id=c.c_id
INNER JOIN sm sm
ON s.t_id = sm.t_id
WHERE s.c_id=8;
次の結果セットを返します
s.s_id s.t_id c.c_id c.desc sm.user_id
3 123 8 something 2
3 123 8 something 2
3 123 8 something 1
4 456 8 something 2
4 456 8 something 2
私はしたいと思います
- ユーザーが製品を所有しているかどうかを示す追加の列を結果セットに作成します (これには
CASE
構文の使用が含まれます) - 一意のもののみを表示する
s.s_id
(これには を使用する必要がありますGROUP BY s.s_id
)
たとえばs.c_id=8
、sm.user_id=1
結果セットは次のようになります
s.s_id s.t_id c.c_id c.desc sm.user_id does_user_own_product
3 123 8 something 1 yes
4 456 8 something 2 no
の場合、少なくとも 1 つあるためs.s_id=3
、 の値はdoes_user_own_product
です。が存在しないため 、 の値はです。yes
sm.user_id=1 WHERE s.s_id=3
s.s_id=4
does_user_own_product
no
sm.user_id=1 WHERE s.s_id=4
たとえばs.c_id=8
、sm.user_id=2
結果セットは次のようになります
s.s_id s.t_id c.c_id c.desc sm.user_id does_user_own_product
3 123 8 something 1 yes
4 456 8 something 2 yes
の場合、少なくとも 1 つあるためs.s_id=3
、 の値はdoes_user_own_product
です。の場合、少なくとも 1 つあるため 、 の値はです。yes
sm.user_id=2 WHERE s.s_id=3
s.s_id=4
does_user_own_product
yes
sm.user_id=2 WHERE s.s_id=4
s.c_id
と の値を指定すると、上記の 2 つのサブセットを達成するための適切なクエリは何でしょうか。sm.user_id
編集 ユーザーが製品を所有することの意味について、混乱があることを認識しています。
ユーザーの ID が sm.user_id にある場合、ユーザーはその s.s_id を所有しています。
たとえば、元の結果セットでは
s.s_id s.t_id c.c_id c.desc sm.user_id
3 123 8 something 2
3 123 8 something 2
3 123 8 something 1
4 456 8 something 2
4 456 8 something 2
ユーザー 1 と 2 は s.s_id 3 を所有し、ユーザー 2 のみが s.s_id 4 を所有しています。