2012-07-26 76 views
0

我有必要做一個插入到MySQL,其中記錄並不在目標表中存在但是這時候已經的MySQL凡NOT EXISTS基於3個值插入記錄

我的查詢

INSERT INTO comment (`mid`, `pid`, `comment_text`, `comment_date`, `comment_type`) 
VALUES (180, 2, NULL, '2012-07-26 10:19:00', 'tag') WHERE NOT EXISTS (SELECT * FROM `comment` WHERE `mid`=180 AND `pid`=2 AND `comment_type`='tag') 

運行我得到這個錯誤

你的SQL語法錯誤;檢查 對應於你的MySQL服務器版本正確的語法使用 附近「WHERE NOT EXISTS(SELECT * FROM comment WHERE mid = 180和 '的pid」列2個

任何想法基本上是手工我要停止被添加到該表中重複的行,當他們匹配值

回答

1

嘗試:

INSERT IGNORE INTO comment 
(
`mid`, `pid`, `comment_text`, `comment_date`, `comment_type` 
) 
(
    SELECT 180, 2, NULL, '2012-07-26 10:19:00', 'tag' 
    FROM comment 
    WHERE `mid`=180 AND 
      `pid`=2 AND 
      `comment_type`='tag' 
    LIMIT 1 
); 

編輯:更好的辦法做到這一點:

從表中刪除重複see here

ALTER IGNORE TABLE comment ADD UNIQUE KEY ix1(mid, pid, comment_type); 

INSERT IGNORE INTO comment 
(
`mid`, `pid`, `comment_text`, `comment_date`, `comment_type` 
) 
VALUES 
(
SELECT 180, 2, NULL, '2012-07-26 10:19:00', 'tag' 
); 
+0

謝謝,但這仍然是增加一行 – 2012-07-26 10:01:06

0

添加ignore

INSERT IGNORE INTO comment ... 

防止重複櫻雪RTS。您不能在insert中使用where子句。

如果使用IGNORE關鍵字,則執行INSERT語句時發生的錯誤將被視爲警告。例如,如果沒有IGNORE,表中重複表中現有UNIQUE索引或PRIMARY KEY值的行會導致重複鍵錯誤,並且語句會中止。使用IGNORE時,該行仍未插入,但未發出錯誤。

the MySQL INSERT Documentation

這意味着你應該添加一個唯一鍵到表採取的行動(如果你還沒有的話)本身進行了重複數據庫檢查。如果數據庫發現重複,則不會生成INSERT

如果您想在出現重複的情況下創建UPDATE。見here

+0

謝謝你的回覆,你可以擴大你的答案有點謝謝 – 2012-07-26 10:07:25

+0

謝謝你,我確實有一個獨特的ID,這是不是我試圖防止重複的字段,本質上有3種類型的評論'text','tag','view'用戶可以根據需要添加儘可能多的文本註釋,但只有1個標籤和1個視圖有多個用戶可以基於中間插入 – 2012-07-26 10:17:40

+0

要實現相當複雜的條件,您可以編寫一個'在插入'觸發器,檢查你的。 [取消-嵌件示例](HTTP://計算器。com/questions/229765 /) – 2012-07-26 10:23:03

0

爲什麼不只是爲了讓一個由唯一索引中,pid和comment_type列?

+0

好的建議,但在這種使用情況下,它不會工作,因爲我需要其他用戶添加標籤,還允許他們添加其他評論類型 – 2012-07-26 10:03:47