我搜索一种在数据库(MySQL)中输入数据的方法,如果它们在DB中不存在:类似于:
INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
WHERE NOT EXISTS (SELECT * FROM TABLE)
此查询有什么问题?
答案 0 :(得分:7)
虽然您无法在上述查询中使用NOT EXISTS
,但您可以使用子查询。这是使用LEFT 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;
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')
答案 1 :(得分:0)
建议在做作业之前做好功课。如果您查看谷歌或stackoverflow,您可以找到类似的问题:
MySQL: Insert record if not exists in table
我相信这会解决你的问题。
要明确:不,您不能在INSERT中使用WHERE。但是,您可以锁定表以避免在存在的位置插入记录。这称为CONSTRAINT,需要从表创建声明。
您需要的一切都在链接的问题中。
答案 2 :(得分: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,但它应该在球场上。