插入避免重复相同的表

时间:2018-07-29 02:33:00

标签: sql insert duplicates

我从SQL和整个编程开始。

我试图在表中插入一些行,但是如果已经存在具有相同值的行,则会出现错误。

我需要在表“ GPointBagCalender”中添加每个LOGINUID的日期,而SEALTYPE始终等于4。问题是,如果我记录了LOGINUID和日期的重复项,则会给我一个主错误。键。

我尝试了如果不存在

BEGIN
    IF NOT EXISTS (SELECT LoginUID, RegDate, SealType
                   FROM GPointBagCalender
                   WHERE RegDate = CONVERT(Datetime, '2018-07-25 01:32:00', 120))
    BEGIN
        INSERT INTO GPointBagCalender 
            SELECT DISTINCT
                g.LoginUID, 
                CONVERT(Datetime, '2018-07-25 01:32:00', 120), 4
            FROM 
                GPointBag g
    END
END

不存在

INSERT INTO GPointBagCalender 
    SELECT DISTINCT  
        g.LoginUID, CONVERT(Datetime, '2018-07-25 01:32:00', 120), 4
    FROM  
        GPointBag g
    WHERE 
        NOT EXISTS (SELECT LoginUID, RegDate, SealType
                    FROM GPointBagCalender
                    WHERE RegDate = CONVERT(Datetime, '2018-07-25 01:32:00', 120))

WHERE NOT EXISTS的情况下,我收到“受影响的0行”。在IF NOT EXISTS情况下,它仅执行命令,或者如果没有一个与日期匹配的寄存器,则为每个LOGINUID记录一行。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我假设您使用的是MySQL,但这适用于大多数数据库。

使用:INSERT IGNORE INTO,当遇到重复记录时,它将无提示地忽略错误。

答案 1 :(得分:0)

您可以按照自己的意愿去做:

INSERT INTO GPointBagCalender ( . . . ) -- list the columns here
    SELECT DISTINCT g.LoginUID,
       CONVERT(Datetime, '2018-07-25 01:32:00', 120), 4
    FROM GPointBag g
    WHERE NOT EXISTS (SELECT LoginUID, RegDate, SealType
                      FROM GPointBagCalender gbc
                      WHERE gbc.LongUID = g.LoginUID AND
                            RegDate = CONVERT(Datetime, '2018-07-25 01:32:00', 120)
                     );