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

时间:2019-04-02 02:48:57

标签: 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         click_url  

我想编写一条select语句,在其中我们将选择user_id和相同的user_id的动作,其中动作为receive_content但最终输出不包含receive_content输出是:

user_id           action
4832              click_icon
4832              click_image

我一直在尝试案例,但它还会选择我要排除的receive_content字段。

3 个答案:

答案 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)

Demo on dbfiddle

答案 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'