2

我有一个消息表,其中包含给定消息的 ato_id和 a 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 存在的所有记录,但我不确定如何让它只返回非重复项,并且只返回一个字段,即不是 12 的 user_id。

简而言之,它将返回用户 12 与其具有现有消息记录的任何用户的 ID。

我希望我已经解释得足够好,我不得不相信我还没有学会它相对简单。

编辑 :

我应该指定,虽然我当前的 SQL 有两个字段,但我只希望返回一个字段 ---contact_id。并且不应该有重复。

contact_id 不是消息表中的字段,但这是我希望查询返回的字段名称,无论它是返回 from_id 还是 to_id

4

3 回答 3

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
于 2013-08-23T19:14:15.010 回答
1

您可以使用union

select
 from_id as contact_id
from messages
where to_id = 12
union
select
 to_id
from messages
where from_id = 12

此外,从文档(强调我的):

UNION 的默认行为是从结果中删除重复的行。

或者,您可以使用if()(或case):

选择不同的
 if(from_id = 12, to_id, from_id)作为contact_id
来自消息
其中 from_id = 12
或 to_id = 12
于 2013-08-23T19:23:57.573 回答
0

You need to UNION two queries.

于 2013-08-23T19:17:45.927 回答