我正在使用此语句从另一个表插入记录:
SQL> insert into city(city_code, country_code, city)
select distinct(city_code), country_code, city_name
from airport_final;
2 3
9012 rows created.
我发现很多重复的记录:
SQL> SELECT city_code, COUNT(city_code)
FROM airport_final
GROUP BY city_code
HAVING COUNT(city_code) > 1;
VRA 2
WBU 3
YMQ 4
YPR 2
330 rows selected.
我不知道我正在选择不同的记录,但为什么它会插入重复项
此致
DISTINCT
对整行(列出的所有列)而不是一列进行操作,因此它不能用于仅获取一列的唯一性。您需要使
GROUP BY
键保持唯一,并对其他属性使用某种聚合函数:可以使用窗口函数完成类似的操作
ROW_NUMBER
,您可以按照您希望在子句中实现的优先级逻辑,确保所有非键属性都从同一行获取ORDER BY
:实际上,您可能有脏数据,对于每个城市代码代表的城市名称和/或国家/地区存在分歧。您将面临确定哪个关联正确、哪个关联不正确的问题。在上面的例子中,我只是采用了按字母顺序排名最低的城市名称,但适当的逻辑可能有很大不同。这将取决于您和您的数据。但是,如果您想要一个由城市代码键入的表格,则必须在不同的关联之间进行选择。您可能会发现无法使用代码进行操作,而必须将其弹出到 Excel 中并手动删除错误条目,并使用人类智能进行清理。虽然这很不幸,但这是在不遵守规范化规则时所发生的情况中吸取的教训。