我有两个表,一个表包含有关县的数据,另一个表包含有关州的数据。有时不同州的县名可以使用相同的确切名称,因此我试图在县表中填充一个unique_name
列,该列是县名和该县所在州的缩写(例如:美国檀香山县)。
我提出了以下查询:
ALTER TABLE counties
UPDATE unique_name =
(
SELECT concat(counties.name, ', ', states.name_abbr)
FROM counties
INNER JOIN states
ON counties.statefp = states.statefp
) WHERE unique_name = ''
但是,我不断收到以下错误消息:
DB::Exception: Unknown identifier: states.statefp, context: required_names: 'states.statefp' source_tables: table_aliases: private_aliases: column_aliases: public_columns: masked_columns: array_join_columns: source_columns: .
内部查询本身就可以正常工作,但是我不明白为什么在尝试进行更新时会出现此错误。有什么想法吗?
答案 0 :(得分:1)
ClickHouse不支持ALTER TABLE UPDATE的依赖联接。幸运的是,有一种解决方法。您必须为更新创建一个特殊的Join引擎表。像这样:
CREATE TABLE states_join as states Engine = Join(ANY, LEFT, statefp);
INSERT INTO states_join SELECT * from states;
ALTER TABLE counties
UPDATE unique_name = concat(name, joinGet('states_join', 'name_abbr', statefp))
WHERE unique_name = '';
DROP TABLE states_join;
请注意,它仅适用于19.x版本。