选择数据库表中的相互数字

时间:2016-03-04 14:14:24

标签: mysql

[![在此处输入图像说明] [1]] [1]

请朋友这是一个用于恶魔用户的表,所以我想为用户1和用户2选择共同的朋友。共同的朋友都是用圆圈标记的用户,我用特定的颜色对每个用户进行分组:这是我的编码:

    SELECT * FROM friends AS f5
INNER JOIN 
((SELECT one FROM friends WHERE two =  '1') AS f1,
(SELECT two FROM friends WHERE one =  '1') AS f2,
(SELECT one FROM friends WHERE two =  '2') AS m1, 
(SELECT two FROM friends WHERE one =  '2') AS m2)
ON (f1.one  = m1.one AND f2.two = m2.two ) 

1 个答案:

答案 0 :(得分:0)

您在查询中提供的JOIN条件不对f5施加任何约束,因此它肯定会返回太多记录,并且在许多情况下也会重复记录。

其次,对f1m1与另一对f2m2之间也没有关联。因此,这将导致笛卡尔积,并返回太多记录。

根据您的表结构,有几种方法可以编写SQL语句来为两个给定的人获取共同的朋友。

这是一个:

SELECT      fr1.id
FROM        (
            SELECT CASE WHEN one = 'Helene' THEN two ELSE one END id
            FROM   friends
            WHERE  'Helene' in (one, two)
            ) AS fr1
INNER JOIN  (
            SELECT CASE WHEN one = 'Eric' THEN two ELSE one END id
            FROM   friends 
            WHERE  'Eric' in (one, two)
            ) AS fr2
        ON  fr2.id = fr1.id;

SQL Fiddle

只需确保在第一个子查询中插入第一个人的姓名两次,并在第二个子查询中两次插入第二个人的姓名。我在上面的例子中采用了名字“Helene”和“Eric”。