SQL - 插入表中而不重复pkey

时间:2017-12-15 05:00:56

标签: sql postgresql

我想从表A中插入表B中的一些特定列,其中我将其中一列作为PKEY:

    DROP TABLE IF EXISTS Vehicle CASCADE;
    CREATE TABLE Vehicle(
        license VARCHAR(20),
        vehicle_type VARCHAR(255),
        make VARCHAR(255),
        model VARCHAR(255),
        year INTEGER,
        color VARCHAR(255),
        state CHAR(2),
        PRIMARY KEY (license)
    );

当我使用INSERT函数时出现问题,因为我使用SELECT DISTINCT选项,我想我只是将列的DISTINCT一起完成:

    INSERT INTO Vehicle(license, vehicle_type, make, model, year, color, state)
    SELECT
        DISTINCT(license)
        ,vehicle_type
        ,make
        ,model
        ,year
        ,color
        ,state
    from Importacio;

我想插入每辆车的信息,但没有重复,作为其牌照(板)不应该在车辆中重复。然后这显示我何时运行它:

ERROR:  duplicate key value violates unique constraint "vehicle_pkey"
DETAIL:  Key (license)=(MD-117254-MB) already exists.

如何仅在考虑DISTINCT许可证的情况下进行INSERT?也许我应该使用LEFT JOIN,但我不确定。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

因为您的表importacio有重复项,您必须为将要排除的内容定义另一个过滤条件。

EG。您可以在最近一年进行排序。

INSERT INTO Vehicle(license, vehicle_type, make, model, year, color, state) 
SELECT DISTINCT license ,vehicle_type ,make ,model ,year ,color ,state 
from Importacio t1
Join (select t2t1.licencse, max(t2t1.year) 'year' from impotacio t2t1 group by t2t1.license) t2 on t1.Licencse=t2.license and t1.year=t2.year

虽然因为我不知道你的数据,也可能有重复的年份。你可以添加另一个JOIN语句来增强过滤,但你应该分析重复项并根据它进行连接