也许陈述不是很清楚,所以就到这里。 我们有一个mysql表,其中有这样的列:
id(key) user_id action
1 4832 receive_content
2 4832 click_icon
3 4832 click_image
4 4447 receive_push
5 4447 click_url
我想编写一条select语句,在其中我们将选择user_id
和相同的user_id
的动作,其中动作为receive_content
但最终输出不包含receive_content
输出是:
user_id action
4832 click_icon
4832 click_image
我一直在尝试案例,但它还会选择我要排除的receive_content
字段。
答案 0 :(得分:1)
您可以使用EXISTS
子句检查user_id
是否具有receive_content
动作,然后还检查每一行的action
是否不是{{1 }}:
receive_content
输出:
SELECT *
FROM actions
WHERE action != 'receive_content'
AND EXISTS (SELECT *
FROM actions a2
WHERE action = 'receive_content'
AND a2.user_id = actions.user_id)
答案 1 :(得分:0)
尝试使用内部查询:
select a.user_id, a.action
from table a
join table b on b.user_id = (select b2.user_id from table b2 where b2.action = "receive_content" and b.user_id = b2.user_id)
where a.action <> "receive_content"
答案 2 :(得分:0)
您必须将自己与该表连接起来,在要保留的过滤器行之后,然后选择所需的列。
解决方案可以是以下查询:
select a.user_id,a.action
from actions a join actions b on a.user_id = b.user_id and a.id !=b.id
where
b.action='receive_content' and a.action != 'receive_content'