我有以下查询
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
当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
当s.s_id=3
, 的值does_user_own_product
是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
和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