我正在尝试从PHP脚本创建一个条件插入到我的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 - Duplicate entry '22‘for key 1”,但该表之前没有id为22的条目。??!!
到底怎么回事?
发布于 2010-12-19 11:37:29
将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")
发布于 2010-12-19 17:15:42
您将得到一个重复的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;这将消除重复的问题(如果它工作,对不起,但我没有检查过这个)。
发布于 2010-12-19 23:13:43
我用一种不同的方式解决了这个问题。(我被告知HAVING语句很慢,所以我不确定这是不是最好的方法……但这是我工作的唯一方法。)
INSERT INTO profiles (id,firstname)
SELECT 22,'John'
FROM li_profiles
WHERE firstname = 'John'
HAVING COUNT(*) = 0;https://stackoverflow.com/questions/4481433
复制相似问题