选择排除同一列中mysql查询中特定值的字段

选择排除同一列中mysql查询中特定值的字段,mysql,sql,database,Mysql,Sql,Database,也许这句话不太清楚,那就来吧。 我们有一个mysql表,其中有如下列: id(key) user_id action 1 4832 receive_content 2 4832 click_icon 3 4832 click_image 4 4447 receive_push 5 4447

也许这句话不太清楚,那就来吧。 我们有一个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语句,其中我们将为同一用户id选择用户id和操作,其中操作是接收内容,但最终输出不包含接收内容,因此输出为:

user_id           action
4832              click_icon
4832              click_image
我一直在尝试案例,但它也选择了我要排除的receive内容字段。

您可以使用EXISTS子句检查用户id是否有receive内容操作,然后还可以检查每行的操作是否为not receive内容:

输出:

id  user_id action
2   4832    click_icon
3   4832    click_image
尝试使用内部查询:

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"

您必须在筛选完要保留的行后,将表与其自身联接,并选择所需的列

解决方案可以是以下查询:

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'     

嘿,谢谢尼克,你的快速回复,这很有效。如果需要,将要求您进一步改进,可以吗?@0decimal0没问题。如果改进是重大的,你可能应该问另一个问题,否则很乐意回答。
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'