我正在尝试使用competition
更新特定的JOIN
。 tables
的结构如下:
国家:
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"
问题在于查询没有更新任何内容。我做错了什么?
答案 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;
您还没有描述其他情况吗?