[![在此处输入图片描述] [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
施加任何约束,因此它肯定会返回太多记录,并且在许多情况下也会重复记录。
其次,一方面在对f1
,m1
和另一方面在对f2
,m2
之间也没有链接。同样,这将导致笛卡尔积,并返回太多记录。
根据您的表结构,有几种方法可以编写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/