【问题标题】:Insert avoid duplicate same table插入避免重复同一张表
【发布时间】:2019-01-05 16:31:34
【问题描述】:

我从 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记录一行。

感谢任何帮助。

【问题讨论】:

  • 如果主键只有LoginUIDSealType,那么您需要将表更改为将RegDate 也作为主键的一部分。
  • 这留下了太多的余地来帮助您...请将表格的CRATE TABLE 语句和它们的示例数据发布为INSERT INTO 语句。
  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...
  • 对不起,我正在使用 sql-server

标签: sql insert duplicates


【解决方案1】:

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

使用:INSERT IGNORE INTO,当遇到重复记录时会默默忽略错误。

【讨论】:

  • 似乎 OP 使用 Sql Server,其中INSERT IGNORE INTO 不是有效命令。
【解决方案2】:

你可以做你想做的事:

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)
                     );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多