繁体   English   中英

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

[英]MySQL get only rows with a unique value for a certain field

我只想为特定字段(实际上是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. if ((senderID == '1' && "__ receiverID is not yet listed__") || (receiverID == '1' && "__ senderID is not yet listed__"))伪代码中的if ((senderID == '1' && "__ receiverID is not yet listed__") || (receiverID == '1' && "__ senderID is not yet listed__"))

最终的返回值应该是(0, 1)

如何在(My)SQL中执行此操作? 我确实知道如何使用PHP来执行此操作,但是当有成千上万的记录时,它的速度就不够快了。

亲切的问候,

提姆

如果执行此操作,您将在发送方和接收方获得所有唯一ID。

此外,UNION将合并两个结果。

按照您的逻辑,如果您需要对发送/接收的ID分别进行操作,则可以使用第二列的值('S'/'R')来过滤两个集合。

SELECT distinct id, 'S' as Type FROM table WHERE senderID='1' 
UNION
SELECT distinct id, 'R' as Type FROM table WHERE receiverID='1' 
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 |
+---------+

就像是

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM