无法使用JOIN

时间:2019-03-14 10:50:21

标签: mysql sql

我正在尝试使用competition更新特定的JOINtables的结构如下:

国家

id | name | iso
 5  Brazil  BR

竞争

id | country_id | name     |
 1      5          Serie A
 2      5          Serie B
 3      5          Serie C

competition_seasons

id | competition_id | name  | update_at
 1         1           2019     2019-01-15 00:00:00
 2         1           2018     2019-01-15 00:00:00
 3         1           2017     2019-01-15 00:00:00
 4         2           2019     2019-01-15 00:00:00
 5         2           2018     2019-01-15 00:00:00
 6         2           2017     2019-01-15 00:00:00
 7         3           2019     2019-01-15 00:00:00
 8         3           2018     2019-01-15 00:00:00
 9         3           2017     2019-01-15 00:00:00

update_at上的competition_seasons设置为null。所以我写了这个查询:

UPDATE country n
    JOIN competition c ON n.id = c.country_id
    JOIN competition_seasons s ON c.id = s.competition_id
    SET s.update_at = NULL
    WHERE n.name = "Brazil"

问题在于查询没有更新任何内容。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您应该在查询中列出要首先更新的表。在这种情况下,我们可以颠倒连接的顺序,并首先列出competition_seasons表:

UPDATE competition_seasons s     -- target table, listed first
INNER JOIN competition c
    ON c.id = s.competition_id
INNER JOIN country n
    ON n.id = c.country_id
SET
    s.update_at = NULL
WHERE
    n.name = 'Brazil';

请注意,假设它们都是内部联接,则联接的顺序在这里无关紧要。

答案 1 :(得分:1)

  

目标是将Competition_seasons的update_at设置为null。

我希望

UPDATE competition_seasons cs
    SET update_at = NULL;

您还没有描述其他情况吗?