MySQL仅获取具有特定字段的唯一值的行

时间:2010-10-10 12:44:04

标签: sql mysql field unique

我想只获取某个字段具有唯一值的行(实际上是2个)。 我的桌子是这样的:

id    senderID    receiverID    ...    ...    ...
_________________________________________________
0     0           1             ...    ...    ...
1     2           1             ...    ...    ...
2     1           0             ...    ...    ...
3     0           2             ...    ...    ...
4     2           0             ...    ...    ...
5     1           2             ...    ...    ...

在此表中,id是唯一始终senderID是发送邮件的用户的ID,receiverID是收到邮件的用户的ID。 ...是一些字段(如text),这些字段并不重要,也不是唯一的。

首先,我希望获得所有行,其中我(#1)是发送者或接收者。

SQL: "SELECT id FROM table WHERE senderID='1' OR receiverID='1'";

这将返回(0, 1, 2, 5)

但是现在,我只想要所有独特的记录。 所以条件是:

  1. 1应为senderID或receiverID。
  2. 伪代码中的
  3. if ((senderID == '1' && "__ receiverID is not yet listed__") || (receiverID == '1' && "__ senderID is not yet listed__"))
  4. 最终回报应为(0, 1)

    如何在(我的)SQL中执行此操作?我知道如何使用PHP来做到这一点,但是当有数千条记录时,它已经不再那么快了。

    亲切的问候,

3 个答案:

答案 0 :(得分:2)

如果您这样做,您将获得所有不同的身份证件,您将成为发件人,而不同的身份证件就是您所在的身份。

此外,UNION将结合两种结果。

在你的逻辑中,你可以使用第二列值('S'/'R')过滤分离2组,如果你需要分别为发送/接收的id做事。

SELECT distinct id, 'S' as Type FROM table WHERE senderID='1' 
UNION
SELECT distinct id, 'R' as Type FROM table WHERE receiverID='1' 

答案 1 :(得分:2)

select min(id) from 
(
  select id, senderID pID from table where receiverID = '1'
  union
  select id, receiverID pID from table where senderID = '1'
) as fred
group by pID;

对于您的数据集,这给出了:

+---------+
| min(id) |
+---------+
|       0 |
|       1 |
+---------+

答案 2 :(得分:1)

这样的东西
SELECT DISTINCT id, senderID, receiverID FROM table WHERE senderID='1' OR receiverID='1';

DISTINCT关键字将从结果中删除任何重复项。到目前为止工作正常,除了id,senderID和receiverID之外,你不添加任何其他列。

否则您也可以使用GROUP BY子句

SELECT id FROM table WHERE senderID='1' OR receiverID='1' GROUP BY senderID, receiverID;