繁体   English   中英

SQL 连接表,但排除重复项,其中除 1 之外的所有列都匹配

[英]SQL join tables but exclude duplicates where all columns match except 1

我对 SQL 几乎没有经验,需要连接包含许多重复条目的表。 我已经浏览了很多答案,我能找到的最接近我的问题的是:

连接两个不同的表并删除重复的条目

它建议使用此代码,以按名称和邮政编码列匹配表。

INSERT INTO TABLE1
SELECT * FROM TABLE2 A
WHERE NOT EXISTS (SELECT 1 FROM TABLE1 X 
                  WHERE A.NAME = X.NAME AND 
                  A.post_code = x.post_code)

我唯一的问题是我有几十个专栏,不想把它们都写出来。 基本上,我需要删除所有列都相同的重复项,除了日期时间列。

(在不同时间输入的重复项,因此即使日期时间列中的值不同,对我来说这仍然是重复项。)

有没有办法加入表,但删除除 1 列以外的所有匹配项的重复项?

更新:

非常感谢您的回答! 我可能做错了,但现在我收到 SQL 错误,因为列太多:

在audi_all(创建唯一索引unq_audi_all_columns Vehiclelisted PriceAnuncianteMarcaModeloSérieVersãoCombustívelMês de RegistoAno de RegistoQuilómetrosCilindradaPotênciaValor FixoAceita retomaPossibilidade de financiamentoSegmentoCorTipo de CaixaNúmero de MudançasNº de portasLotaçãoClasse do veículoTracçãoGarantia de Stand (incl. no preço) Registo(s) Livro de Revisões completoNão fumador2º ChaveJantes de Liga LeveAr CondicionadoCondiçãoInspecção válida atéOrigemEstofosNumero de AirbagsMetalizadoGarantia mecanica fabricante atéFiltro de ParticulasTecto de AbrirMedida Jantes de Liga LeveVINIVA dedutívelEmissões CO2IUCou atéMatrículaConsumo CombinadoAutonomia MáximaConsumo UrbanoConsumo Extra UrbanoCapotaCapota EléctricaClássicoSalvadoValor sem IUCValor sem ISV ,[...]

MySQL 说: 文档

1070 - 指定的关键部件太多; 最多允许 32 个零件

通过创建唯一索引来防止重复:

create unique index unq_table1_all_columns on table1 ( . . . );  -- you gotta list the columns here.

您确实需要列出列,但这是必要的,以便数据库知道您的意图。 构建列表很容易,例如:

select group_concat(column_name, ', ')
from information_schema.columns
where table_name = 'table1';

如果有重复,您的插入将返回错误。 或者为了避免它们,请使用on duplicate key update

insert into table1 
    select *
    from table2
    on duplicate key update name = values(name);  -- this does nothing but it avoids an error on a duplicated row

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM