我正在尝试从PHP脚本创建一个条件INSERT到我的MySQL数据库中。以下SQL语法适用于phpMyAdmin,但不适用于我的PHP脚本:
INSERT INTO profiles (id, firstname)
SELECT "22","John" from profiles
WHERE NOT EXISTS (
SELECT * FROM li_profiles
WHERE li_p_firstname = "John"
)
(注意“id”是主键,“firstname”不是键或唯一的)
可能是问题的一部分的奇怪之处在于,当我在phpMyAdmin中运行该SQL时,它确实“工作”(意味着添加了一个新的记录,ID为“22”,名字为“John”)我得到以下警告:“#1062 - 密钥1重复输入'22'” 但该表没有先前的id为22的条目。?? !!
发生了什么事?
答案 0 :(得分:0)
您将获得iD的重复条目,因为您要为profiles
表中的每一行插入一个新行;对于profiles
表中的每一行,li_profiles
表中没有John。你可以试试
INSERT INTO profiles (id, firstname)
SELECT "22","John" from profiles
WHERE NOT EXISTS (SELECT * FROM li_profiles
WHERE li_p_firstname = "John")
LIMIT 1;
这将消除重复的问题(如果它有效,抱歉,但我自己没有检查过。)
答案 1 :(得分:0)
我以不同的方式想出来了。 (我被告知HAVING声明很慢,所以我不确定这是最好的方法......但这是我唯一可行的方法。)
INSERT INTO profiles (id,firstname)
SELECT 22,'John'
FROM li_profiles
WHERE firstname = 'John'
HAVING COUNT(*) = 0;
答案 2 :(得分:-1)
将SELECT更改为VALUES
INSERT INTO profiles (id, firstname) VALUES("22","John") FROM profiles WHERE NOT EXISTS ( SELECT * FROM li_profiles WHERE li_p_firstname = "John" )
此外,如果您使用自动增量值,则应指定下一个值。另外,如果是整数,则给出整数(22)而不是字符串(“22”)