在mysql中按两列一起找到行

时间:2017-07-12 11:04:03

标签: mysql sql

我的表格中有一些行

Sno | sender | receiver
-----------------------
 1  |   A    |    B
 2  |   B    |    A
 3  |   A    |    B
 4  |   C    |    D
 5  |   D    |    C
 6  |   A    |    C
 7  |   C    |    D
 8  |   C    |    A
 9  |   A    |    C

我想要做的是,如果发送者和接收者反之亦然。

例如

如果我有发件人A 收件人B 连续,而另一行中发件人A 收件人A 且收件人B < strong>发件人B 。这种类型的匹配行应该是print(就像我上面的表格一样)。 我尝试了这样的查询:

select sender, receiver from table where (sender,receiver) = (receiver,sender)

但什么也没得到。什么应该查询以获得与上表相同的结果

3 个答案:

答案 0 :(得分:4)

如果您想要在两个方向上显示该对的所有行:

select t.sender, t.receiver
from table t
where (t.sender, t.receiver) in (select t2.receiver, t2.sender from table t2);

答案 1 :(得分:1)

使用 var theAmount = document.getElementById("amount").value; $('#generator').on('click', function() { for(var i = 0; i < theAmount; i++) { generatePassword(); } });

的另一种方法
Exists

您当前的查询仅与同一记录进行比较,而不是检查其他记录中是否存在

答案 2 :(得分:1)

http://sqlfiddle.com/#!9/c5c70b/3

create table t(
    Sno int,
    sender char(10),
    receiver char(10)
);


Insert Into t (Sno, sender, receiver)
Values
 (1,'A','B'),
 (2,'B','A'),
 (3,'A','B'),
 (4,'C','D'),
 (5,'D','C'),
 (6,'A','C'),
 (7,'C','D'),
 (8,'C','A'),
 (9,'A','C');

select distinct 
  sender, receiver
from 
  t
where 
  (sender, receiver) in (select receiver, sender from t);