1

我搜索一种在数据库(MySQL)中输入数据的方法,如果它们在 DB 中尚不存在:类似于:

 INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
 WHERE NOT EXISTS (SELECT * FROM TABLE)

这个查询有什么问题?

4

3 回答 3

8

虽然您不能使用NOT EXISTS上述查询,但可以使用子查询。这是使用 aLEFT JOIN和子查询的一种方法:

INSERT INTO yourtable (name, surname) 
SELECT a.name, a.surname
FROM  
  (SELECT 'name1' name,'surname1' surname) a 
  LEFT JOIN yourtable b ON 
      a.name = b.name AND a.surname = b.surname
WHERE b.name IS NULL;

SQL 小提琴演示

NOT EXISTS方法:

INSERT INTO yourtable (name, surname) 
SELECT a.name, a.surname
FROM  
  (SELECT 'name1' name,'surname1' surname) a 
WHERE NOT EXISTS (
       SELECT 1 
       FROM yourtable 
       WHERE name = 'name1' and surname = 'surname1')

更多小提琴

于 2013-03-25T18:31:47.360 回答
0

假设您有如下定义的表:

+------+  +------+
|Names |  |Add   |
+------+  +------+
|ID    |  |ID    |
|FName |  |FName |
|LName |  |LName |
+------+  +------+

如果您想将 Add 表插入 Names 表而不添加重复项,您可以使用以下 select 语句为您需要的每个 insert 语句创建一行。这也提供了创建审计跟踪的额外好处。

Select CONCAT('INSERT INTO Names \(ID, FName, LName\) VALUES \(',a.ID,',',a.FName,',',a.LName,'\)')
From Add a LEFT JOIN Names N on a.ID = n.ID AND a.FName = n.FName AND a.LName = n.FName
Where n.ID is null;

我不确定我的语法是否完美,因为我不使用 mySQL,但它应该在球场上。

于 2013-03-25T19:05:58.633 回答
0

建议在提问之前先做功课。如果您在 google 或 stackoverflow 中查找,您可以找到与您类似的问题:

MySQL:如果表中不存在则插入记录

我相信这会解决你的问题。

需要明确的是:不,您不能在 INSERT 中使用 WHERE。但是是的,您可以锁定表以避免在它们存在的地方插入记录。这称为 CONSTRAINT,需要从表创建中声明。

您需要的一切都在链接的问题中。

于 2013-03-25T18:39:48.543 回答