如何检查子查询中的多个列?

时间:2013-04-06 05:12:52

标签: mysql

我在MySQL中有几个代表无向图的表。 Users表格有一个user_id(以及其他一些我现在不需要的东西),而Links表格有user_id_1user_id_2(和我需要携带的其他一些数据)。我正在尝试获取给定用户的邻居(包括他自己)之间的所有链接。我的问题基本上是:我该怎么做?我设法得到了所有用户的邻居,加上他自己,以下有些不幸的问题:

SELECT u.* FROM Users u
JOIN Links l ON u.user_id = l.user_id_1
WHERE l.user_id_2 = @arg
UNION
SELECT u.* FROM Users u
JOIN Links l ON u.user_id = l.user_id_2
WHERE l.user_id_1 = @arg
UNION
SELECT * FROM Users
WHERE user_id = @arg

现在,我想准确选择上述查询中出现Linksuser_id_1的{​​{1}}。 有没有办法在不执行该查询两次的情况下执行此操作?因为(虽然我没有对其进行分析)但我怀疑上述查询是非常不具备性能的。作为次要问题,是否有更好的方法来执行子查询?

编辑:有人要求提供样本数据和输出。我在这里给出了user_id_2表。我保证所有这些用户实际上都存在于Links表中,因此您无需担心连接失败或类似的事情。但是我认为这个问题应该在没有加入Users的情况下应该回答。

Users

如果我们对A执行此查询,则上面的link_id user_id_1 user_id_2 1 A B 2 C B 3 C A 4 D C 5 C E 6 D E 7 A D 8 F A 查询应返回除E之外的所有人(其他人都是其他人)。我正在寻找的查询需要返回表中除{5和6之外的所有Users,其中涉及E.特别是它需要返回2和4,以及直接涉及A的链接。 / p>

0 个答案:

没有答案