0

我正在尝试从 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 - 键 1 的重复条目 '22'” 但是该表没有先前的条目,其 id 为 22。??!!

这是怎么回事?

4

3 回答 3

0

您将获得 iD 的重复条目,因为您正在为profiles表中的每一行插入一个新行;对于表中的每一行,profiles表中都没有 John li_profiles。你可以试试

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-19T09:15:41.620 回答
0

将 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-19T03:37:28.877 回答
0

我以不同的方式想通了。(有人告诉我 HAVING 语句很慢,所以我不确定它是不是最好的方法......但它是我唯一可以工作的方法。)

INSERT INTO profiles (id,firstname)
SELECT 22,'John'
FROM li_profiles
WHERE firstname = 'John'
HAVING COUNT(*) = 0;
于 2010-12-19T15:13:43.093 回答