我有一个消息表,其中包含给定消息的to_id
和from_id
。
我想将user_id传递给此查询并让它返回一个非重复的id列表,表示向所提供的user_id发送消息的所有用户。
我现在拥有的是(使用12作为目标user_id):
SELECT from_id, to_id
FROM messages
WHERE
from_id = 12
OR
to_id = 12
这确实返回了user_id存在的所有记录,但是我不确定如何让它只返回非重复项,并且只有一个字段是user_id而不是12。
简而言之,它将返回用户12具有现有消息记录的任何用户的id。
我希望我已经解释得这么好了,我不得不相信我还没有学到它相对简单。
编辑:
我应该指定虽然我当前的SQL有两个字段,但我只想返回一个字段--- contact_id。并且应该没有重复。
contact_id不是消息表中的字段,但这是我想要返回的查询的字段名称,无论它是返回from_id还是to_id
答案 0 :(得分:1)
这是一个避免联合声明的解决方案。
SELECT distinct (case when to_id = 12 then from_id else to_id end) as contact_id
FROM messages
WHERE
from_id = 12
OR
to_id = 12
答案 1 :(得分:1)
您可以使用union
:
select
from_id as contact_id
from messages
where to_id = 12
union
select
to_id
from messages
where from_id = 12
此外,来自the documentation(强调我的):
UNION的默认行为是从结果中删除重复行。
select distinct if(from_id = 12, to_id, from_id) as contact_id from messages where from_id = 12 or to_id = 12
答案 2 :(得分:0)
您需要UNION两个查询。