首页 > 解决方案 > 从不匹配的另一个表的记录中将新记录添加到表中。要匹配的 Clumn 不是主键,而是 Varchar

问题描述

我有两张桌子:

甘蔗包裹

   FID | Acreage | CODE | DATE_PLANT

128-896   28.6     59   2008-08-01

CaneParcelUpdates

   FID  | Acreage | CODE   | DATE_PLANT
 128-896     28.6      59    01/04/2013 0h:00:00
 129-963     15.8      01    01/09/2011 0h:00:00
PRE-8596     12.3      14    31/10/2015 0h:00:00

我想要所有不在第一个 cp 表中的新记录。

我试过这个但没有用

If Not Exists(select * FROM CaneParcelUpdates cpu LEFT JOIN CaneParcel cp ON cpu.FIELD_ID = cp.FIELD_ID)
Begin
INSERT INTO CaneParcel (FIELD_ID,ACREAGE, BSI_CODE,DATE_PLANT)
SELECT FIELD_ID, ACREAGE,BSI_CODE,CONVERT(Date,DATE_PLANT) FROM CaneParcelUpdates;
End

我没有得到任何新记录。

标签: sqlsql-server-2008-r2

解决方案


只需这样做:插入在中不匹配的CaneParcel值。CaneParcelUpdatesCaneParcel

我修剪了日期字段并抓住了前 10 个字符以摆脱 hh:mm:ss

INSERT INTO CaneParcel (FIELD_ID, ACREAGE, BSI_CODE, DATE_PLANT)
    SELECT 
        FIELD_ID, ACREAGE, BSI_CODE,
        CONVERT(Date,substring(DATE_PLANT,4,2) + '/' + left(DATE_PLANT, 2) + '/' + substring(DATE_PLANT,7,4))
    FROM 
        CaneParcelUpdates cpu
    WHERE
        NOT EXISTS (SELECT 1 FROM CaneParcel p 
                    WHERE cpu.FIELD_ID = cp.FIELD_ID); 

推荐阅读