2015-06-06 78 views
0

爲什麼在MYSQL中通過執行這個SQL查詢將2行添加到表中?這個查詢執行兩次!?插入額外的不需要的行到表

INSERT INTO user(`usr_name`, `email`, `name`, `reg_date`, `role_id`) 
(
SELECT "editor1", 
     "[email protected]", 
     "editor1", 
     "2005-12-20", 
     2 
FROM `user` 
WHERE (("admin", 3) IN (
     SELECT usr_name, role_id 
     FROM `user` 
    ) 
    AND NOT EXISTS (
     SELECT usr_name, email 
     FROM `user` 
     WHERE usr_name = "editor1" OR email = "[email protected]" 
    )) 
) 

結果is here!

+0

也許'select'語句返回兩個結果?如果你可以在這個陳述中多說一點,例如你想達到什麼等等,幫助你會更容易。 – d4Rk

回答

1

顯然,在user兩行匹配WHERE條件。

您在第一個FROM中未使用user表。那麼這個怎麼樣,而不是:

INSERT INTO user(`usr_name`, `email`, `name`, `reg_date`, `role_id`) 
    SELECT t.* 
    FROM (SELECT 'editor1' as user_name, '[email protected] as email, 
       'editor1' as name, '2005-12-20 as reg_date, 2 as role_id 
     ) t 
    WHERE ('admin', 3) IN (SELECT usr_name, role_id 
          FROM `user` 
         ) AND 
      NOT EXISTS (SELECT usr_name, email 
         FROM `user` u 
         WHERE u.usr_name = t.usr_name OR u.email = t.email 
        ) 

或者,更好的,但對領域唯一索引,你不希望在表中複製:

create unique index idx_user_username on user(usr_name); 
create unique index idx_user_email on usr(email); 

讓數據庫保護表。它在那裏幫助你。