我正在尝试实现this answer,它显示了如何使用表别名有效地加入到运行查询的同一个表中。
考虑以下(简化)足球队表:
-----------------------------------------------------
| id | name | next_fixture_against | url_token |
=====================================================
| 1 | Hull City | 2 | hull |
-----------------------------------------------------
| 2 | Everton | 1 | everton |
-----------------------------------------------------
我正在尝试编写一个查询来获取给定团队及其下一个对手的名字。
方法1:左连接
以下是我通过调整上述答案得出的结果:
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'
...但是我不知道要替换???
以获取内部子查询以引用外部子查询。
有人能指出我正确的方向吗?提前谢谢。
答案 0 :(得分:1)
您需要ON main_team.id = opposition_team.next_fixture_against
。您尝试在联接中使用团队名称而不是ID。