2013-02-20 68 views
1

昨天我問了這個問題:if in mysql insert statement答案很有效。 問題是如果一個值不存在,我需要在表格中插入一行。 f1。sql如果在插入語句時沒有選擇

If('x' NOT EXIXTS in (select campoX from table) then 
insert into table (...) values (...) etc. 

我該怎麼辦?在互聯網上我無法找到答案:(

+0

什麼,如果值已經存在?你想要什麼專欄的價值是獨一無二的? – 2013-02-20 12:17:45

+0

我認爲你需要PL/SQL來完成這樣的任務 – Abubakkar 2013-02-20 12:18:23

回答

1

我假設你的表名爲TBL。

INSERT INTO tbl (campoX) 
    SELECT 'X' FROM DUAL 
    WHERE NOT EXISTS( 
         SELECT campoX from tbl 
         WHERE campoX ='X' 
        ); 

DUAL純粹是出於人誰要求所有的SELECT語句應該具有和可能的便利其他條款。MySQL可能忽略的條款。MySQL的不需要FROM DUAL如果沒有表被引用。

至於其他一些提到的,你可以在這裏使用INSERT IGNORE聲明如果您campoX是unigue或主鍵字段。

+0

否,因爲我想插入一個新行當且僅當不存在一行具有特定值 – Martina 2013-02-20 12:25:09

+0

你有兩個或一個表嗎?只有在沒有記錄X的情況下,你纔想在表A中插入? – iiro 2013-02-20 12:28:22

+0

只有一張桌子。我做一個例子:IF('Max'NOT IN(從年齡= 24的用戶中選擇姓名)然後插入用戶(姓名,年齡)值('max',24) – Martina 2013-02-20 12:30:56

0

關於:

CASE 
    WHEN 'X' NOT EXIST IN (SELECT campoX FROM yourTable) THEN 
    INSERT INTO yourTable (...) VALUES (...) 
END CASE 
+0

mysql給我一個CASE單詞的錯誤。 – Martina 2013-02-20 12:23:55

+0

@ user1856906現在嘗試 – 2013-02-20 12:37:23

0

發明您的編程語言並不是描述問題的最合適方式。

你的意思是說你只想添加一行數據庫中沒有數據的地方?如果是這樣,那麼確保你已經在表上定義了主鍵或唯一鍵,然後執行INSERT - 但忽略重複的鍵錯誤。事實上,與MySQL可以完全使用「INSERT IGNORE ....」抑制差錯發生的重複鍵

+0

問題是我不想對主鍵進行控制,而是對一個也可以爲空的屬性進行控制。 – Martina 2013-02-20 12:35:15

1

使用雙表:

INSERT INTO campoX (col1, col2, col3) 
SELECT value1, value2, value3 
FROM dual 
WHERE NOT EXISTS(SELECT * 
       FROM campoX 
       WHERE col1=value1);