[![在此处输入图片描述] [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 )

最佳答案

您在查询中提供的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”的名字。

关于mysql - 在数据库表中选择共同数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35798240/

10-12 02:14