因此,我正在制作一个约会应用程序,将用户滑动存储在滑动表中。
每次滑动都是一行。我想要一个查询,该查询将返回特定用户的所有匹配项。
例如:用户1在用户2上滑动,所有者列将包含ID 1和目标ID2。如果用户2在用户1上滑动,则将有另一行,其中用户2是所有者,目标1。 >
由于两个用户互相刷过对方,所以他们匹配了。我需要查询以查找特定用户ID的所有匹配项
我该怎么做?
+-------+--------+
| owner | target |
+-------+--------+
| A | B |
+-------+--------+
| B | A |
+-------+--------+
| C | X |
+-------+--------+
| D | E |
+-------+--------+
| E | Y |
+-------+--------+
如果以上是您的表结构,则在上述情况下,A和B是匹配项。
答案 0 :(得分:1)
您可以使用EXISTS条件
select t1.owner, t1.target
from the_table t1
where exists (select *
the_table t2
where t1.owner = t2.target
and t1.target = t2.owner);
答案 1 :(得分:0)
另一种选择是自我加入。
select s1.owner
, s1.target
from swipe s1
join swipe s2
on ( s2.owner = s1.target
and s1.owner = s2.target
)
order by s1.owner;
这将为每组产生2行。对于此特定数据(A与B)和(B与A)。如果您只想使用一组组合,请添加where子句以删除其中之一。
select s1.owner
, s1.target
from swipe s1
join swipe s2
on ( s2.owner = s1.target
and s1.owner = s2.target
)
where s1.owner < s2.owner
order by s1.owner;