MySQL - 加入同一张桌子?

时间:2014-05-11 12:24:33

标签: mysql database join subquery left-join

我正在尝试实现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'

...但是我不知道要替换???以获取内部子查询以引用外部子查询。

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

1 个答案:

答案 0 :(得分:1)

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

不用担心,我们都做到了这一点。

相关问题