我搜索一种在数据库(MySQL)中输入数据的方法,如果它们在 DB 中尚不存在:类似于:
INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
WHERE NOT EXISTS (SELECT * FROM TABLE)
这个查询有什么问题?
虽然您不能使用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;
和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')
假设您有如下定义的表:
+------+ +------+
|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,但它应该在球场上。
建议在提问之前先做功课。如果您在 google 或 stackoverflow 中查找,您可以找到与您类似的问题:
我相信这会解决你的问题。
需要明确的是:不,您不能在 INSERT 中使用 WHERE。但是是的,您可以锁定表以避免在它们存在的地方插入记录。这称为 CONSTRAINT,需要从表创建中声明。
您需要的一切都在链接的问题中。