[![在此处输入图像说明] [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 )
答案 0 :(得分:0)
您在查询中提供的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;
只需确保在第一个子查询中插入第一个人的姓名两次,并在第二个子查询中两次插入第二个人的姓名。我在上面的例子中采用了名字“Helene”和“Eric”。