postgresql - 如何根据不同表的多列索引的匹配来更新表
问题描述
我希望我不是在问一些非常愚蠢的问题,我确实搜索过以前是否已经回答过这样的问题并且没有找到任何结论性的东西。
这些是创建有问题的两个表的语句:
CREATE TABLE race (
id INT PRIMARY KEY, --raceId
year INT,
round INT,
circuit_id INT REFERENCES circuit (id)
ON DELETE RESTRICT ON UPDATE CASCADE,
name CITEXT,
date DATE,
time TIME,
url CITEXT
)
;
ALTER TABLE race ADD COLUMN season_last_round BOOL;
UPDATE race SET season_last_round = False;
CREATE TABLE
season_last_round AS
SELECT
year,
max(round) AS last_round
FROM race
GROUP BY year
ORDER BY year
;
所以我真正想要实现的season_last_round
是True
如果它实际上是max(round)
在那个之上的话year
。
然后我的方法是在两个表上创建多列索引
CREATE INDEX season_lr_year_last_round ON season_last_round (year, last_round);
CREATE INDEX race_year_round ON race (year, round);
并做类似的事情......
UPDATE race
SET season_last_round = True
WHERE
season_lr_year_last_round = race_year_round ;
但这显然行不通。
非常感谢您的帮助和见解!
解决方案
您可以使用子查询来获取该信息:
UPDATE race
SET season_last_round = true
FROM (
SELECT year, max(round) AS last_round
FROM race
GROUP BY year
) t
WHERE t.year = race.year
and t.last_round = race.round;
另一种选择是使用 IN 的子查询:
UPDATE race
SET season_last_round = true
WHERE (year, round) IN (SELECT year, max(round) AS last_round
FROM race
GROUP BY year)
推荐阅读
- javascript - chrome tabCapture 内容脚本中的 undefiend
- python - 从最小化中排除一些参数
- git - 如何将 github 存储库移动到新存储库下的文件夹
- symfony - 在 Symfony 中将弃用的 FilesystemCache 更新为 FilesystemAdapter
- wordpress - 从 PC 上卸载 Local by Fly Wheel 后无法访问实际的 WordPress 网站
- python - Python中可变性和不变性的机制是什么?
- javascript - HTML 表单无法使用 JavaScript 插入的数据(WordPress、NinjaForms)
- python - 当我网页抓取时,TD列表变为空
- reactjs - 在 Vercel 上部署具有无服务器功能的 CRA
- r - 为 sf 对象创建距离矩阵