如何在插入 sql table 之前检查条目是否存在

how to check if entry exists before inserting in sql table

我有一个名为 Panels 的 table,现在有以下条目。

---Panel table

    p_id    sequence    p_type  
      1       2          '3a'
 ... and many more rows

我正在使用以下查询向 Panels table 中插入一个带有 p_type='4a' 的新条目。为了创建新条目,我将使用 p_type='3a'。我的问题是如何在执行 INSERT INTO.

之前检查 p_type='4a' 的条目是否已存在于 table 中

尝试在网上寻找解决方案,找到了如下模板代码。

if not exists (select column_1 from table_name where column_1 = value)
begin
    insert statement here
end
go

我的插入逻辑如下:

INSERT INTO Panels (p_id,sequence,p_type) 
        SELECT p_id,sequence,'4a'
        FROM Panels
        WHERE p_type='3a'

我遇到的问题是我不知道如何将上面的模板代码逻辑与我的 INSERT INTO 语句集成。有人可以帮我吗?

不要提前检查,而是让数据库通过对其实施 UNIQUE 约束来为您检查。否则,另一个线程总是有可能在检查和插入之间插入该行。

例如:

alter table panels add constraint uq1 (id, p_type);

然后,如果 INSERT 失败,那么组合已经存在。

我认为你可以使用 not exists 如下:

INSERT INTO Panels (p_id,sequence,p_type) 
SELECT p_id,sequence,'4a'
  FROM Panels p
 WHERE p_type='3a'
   And not exists
           (select 1 from Panels pp
             WHERE pp.p_type='4a' 
               and p.p_id = pp.p_id 
               and p.sequence = pp.sequence)