gpt4 book ai didi

mysql - 如何编写这个复杂的自连接

转载 作者:行者123 更新时间:2023-11-29 04:24:09 25 4
gpt4 key购买 nike

我有两个具有给定字段的表

  1. 高中生

    • 姓名
    • 年级
    • 编号
  2. 喜欢

    • id1
    • id2

HighSchooler 保存有关高中生的信息,Likes 是一个关系表,显示谁喜欢高中生。 id1 的学生喜欢 id2 的学生。关系有单向关系(当约翰喜欢露西但露西不喜欢约翰时)和双向关系(当艾伯特喜欢桑德拉并且桑德拉也喜欢艾伯特时)。

我需要一个返回两列的查询,其中两列的名称具有双向关系,即如果 A 喜欢 B 并且 B 喜欢 A,那么示例结果集将是

name | name
A B

我摆弄它并提出了这个查询,但我不理解它并且认为它不是最佳的。

SELECT DISTINCT a.name, b.name 
FROM Highschooler a, Highschooler b, Likes l1
JOIN Likes l2 on l1.ID1=l2.ID2
WHERE a.ID=l1.ID2 AND b.ID=l1.ID1 AND a.ID=l2.ID1 AND a.ID > b.ID;

最佳答案

尝试使用规则 (l1.id1 = l2.id2) and (l1.id2 = l2.id1)

将 Likes 表与其自身连接起来

例子:

SELECT
a.name AS a_name,
b.name AS b_name
FROM
HighSchooler AS a
INNER JOIN Likes AS l1
ON (a.id = l1.id1)
INNER JOIN Likes AS l2
ON ((l1.id1 = l2.id2) AND (l1.id2 = l2.id1) AND (l1.id1 > l2.id1))
INNER JOIN HighSchooler AS b
ON (l2.id1 = b.id)

http://sqlfiddle.com/#!2/44a07/6

关于mysql - 如何编写这个复杂的自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15316087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com