gpt4 book ai didi

MySQL - 连接在同一个表上?

转载 作者:行者123 更新时间:2023-11-29 12:59:03 26 4
gpt4 key购买 nike

我正在尝试实现 this answer ,它展示了如何使用表别名有效地联接到正在运行查询的同一个表。

考虑以下(简化的)足球队表:

-----------------------------------------------------
| id | name | next_fixture_against | url_token |
=====================================================
| 1 | Hull City | 2 | hull |
-----------------------------------------------------
| 2 | Everton | 1 | everton |
-----------------------------------------------------

我正在尝试编写一个查询来获取给定团队及其下一个对手的名称。

方法一:左连接

这是我通过调整上述答案得出的结论:

SELECT main_team.name, opposition_team.name as against
FROM teams AS main_team
LEFT JOIN teams AS opposition_team
ON main_team.name = opposition_team.next_fixture_against
WHERE main_team.url_token = 'hull'

这会产生:

-----------------------
| name | against |
=======================
| Hull City | NULL |
-----------------------

如果我删除 WHERE 子句,它确实起作用,但是奇怪的是,它以与我期望的相反的顺序出现,即

-----------------------
| name | against |
=======================
| Everton | Hull City |
-----------------------

而不是名称=赫尔城,对阵=埃弗顿。

(这纯粹是一个兴趣点 - 显然我需要 where 子句,因为我针对的是特定团队,而不是所有团队。)

方法2:子查询

我想出了以下替代方法:

SELECT
name,
(SELECT name FROM teams WHERE id = ???) AS against
FROM
teams
WHERE
url_token = 'hull'

...但我不确定用什么替换 ??? 才能让内部子查询引用外部子查询。

有人能指出我正确的方向吗?提前致谢。

最佳答案

您需要ON main_team.id = Opposite_team.next_fixture_against。您尝试在加入中使用团队名称而不是 ID。

别担心,我们都做到了。

关于MySQL - 连接在同一个表上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23592576/

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