gpt4 book ai didi

sql - UPDATE FROM SELECT JOIN 以获得独特的匹配

转载 作者:行者123 更新时间:2023-11-29 13:48:06 25 4
gpt4 key购买 nike

我想要从 SELECT JOIN 更新,但前提是在连接的右侧恰好有一个匹配项。有成语吗?

我有短名(例如 ABC)和长名(例如 ABC-DEF-01)。对于每个长名称,查看是否有与之匹配的短名称(例如 ABC-DEF-001 中的 ABC)。如果恰好有一个短名称匹配,则用该短名称值更新空的短名称列。

我相信这可以完成任务,但我认为这不是正确的方式。有没有更干净更快的方法? Here's an interactive version为了方便。

我特别担心 array_agg(),它似乎与关系习语不符。

create table long_names (short_name varchar, long_name varchar);
insert into long_names (long_name)
values
('ABC-DEF-01'),
('ABC-DEF-02'),
('CDE-FGH-01');


create table short_names(short_name varchar);
insert into short_names(short_name)
values
('ABC'),
('DEF'),
('FGH');


UPDATE long_names
SET short_name = subquery.short_name
FROM (
SELECT
long_names.long_name,
count(short_names.short_name),
(array_agg(short_names.short_name))[1] AS short_name
FROM long_names
LEFT JOIN short_names
ON long_names.long_name LIKE ('%' || short_names.short_name || '%')
GROUP BY long_names.long_name
HAVING count(DISTINCT short_names.short_name) = 1
) AS subquery
WHERE long_names.long_name = subquery.long_name

最佳答案

我会用

min(short_names.short_name)

代替

(array_agg(short_names.short_name))[1]

但除此之外,我想不出更好的方法来完成此任务。

关于sql - UPDATE FROM SELECT JOIN 以获得独特的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45133667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com