gpt4 book ai didi

mysql - 关于将 Join Query 转换为 Nested Subquery 的说明

转载 作者:行者123 更新时间:2023-11-30 22:22:22 24 4
gpt4 key购买 nike

我知道这个问题经常出现。但是,我无法解释为什么会这样。我正在做斯坦福大学数据库简介类(class)的 Q1:https://lagunita.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_query_core/

Find the names of all students who are friends with someone named Gabriel.

查询将是:

SELECT h1.name
FROM Highschooler h1
INNER JOIN Friend f1 ON (h1.ID = f1.ID1)
INNER JOIN Highschooler h2 ON (h2.ID = f1.ID2)
WHERE h2.name = 'Gabriel'

网上看答案,相当于:

SELECT name
FROM Highschooler
WHERE ID IN (SELECT ID1
FROM Friend
WHERE ID2 IN (SELECT ID FROM Highschooler WHERE name='Gabirel') )

为什么会这样?有没有一种直观的方法可以解释为什么这两个查询相等?

最佳答案

对于嵌套查询:

  1. Highschoolers 表中,找到 Gabriel 的 ID。
  2. Friends 表中,找到所有结果为 1 的 friend 的 ID。
  3. Highschoolers 表中,找到结果 2 中每个人的名字。

对于连接查询:

  1. 对于 Highschoolers 中的每个人,通过将 Highschoolers.IDFriends.ID1 匹配,找到他们所有 friend 的 ID。
  2. 通过将 Friends.ID2Highschoolers.ID 的第二个实例相匹配,找到所有 friend 的名字。

因为我们需要同时查看 Highschoolers 中的两行,所以我们需要对表的两个单独引用。您可以将其想象成有两个相同的 Highschoolers 副本,只要您记得真的只有一个副本,您只是使用了它两次。

  1. 只获取 friend 名字为“Gabriel”的那些记录。

本质上,这两个查询从相反的两端处理同一个问题。

希望对您有所帮助。

关于mysql - 关于将 Join Query 转换为 Nested Subquery 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344736/

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