2015-06-25 9 views
0

PostgreSQL的語法錯誤,我有以下SQL查詢,只插入,如果它不存在於表中對於其中不存在

INSERT INTO message_log (message, from_id, to_id, match_id, unix_timestamp, own_account) VALUES('hi', 'tom', 'tom', '55640ec48a2aecab0e3c096c556f5435f4bb054c68930040', 33333, TRUE) 
WHERE NOT EXISTS (SELECT 1 FROM message_log WHERE message = 'hi' AND from_id = 'tom' AND to_id = 'tom' AND match_id = '55640ec48a2aecab0e3c096c556f5435f4bb054c68930040' AND unix_timestamp = 33333) 

不過,我得到以下錯誤

ERROR: syntax error at or near "WHERE" 
LINE 2: WHERE NOT EXISTS (SELECT 1 FROM message_log where message = ... 
     ^

什麼我做錯了?

+1

有查詢沒有'SELECT'。 – joop

+0

這不是你可以做的事情。至少不是那樣的。你能解釋一下你用INSERT語句來完成的任務嗎? – JNevill

+1

@JNevill我希望行只能在表中不存在的情況下插入 – Arya

回答

1

插入表中的記錄只有當記錄不存在與做:

INSERT INTO message_log (message, from_id, to_id, match_id, unix_timestamp, own_account) 
SELECT 'hi', 'tom', 'tom', '55640ec48a2aecab0e3c096c556f5435f4bb054c68930040', 33333, TRUE 
FROM message_log 
WHERE NOT EXISTS (SELECT 1 FROM message_log WHERE message = 'hi' AND from_id = 'tom' AND to_id = 'tom' AND match_id = '55640ec48a2aecab0e3c096c556f5435f4bb054c68930040' AND unix_timestamp = 33333) 

這是一個有點冗長,但它應該做你想要什麼。或者,你可以在表上設置一個唯一的主鍵,所以如果你試圖插入一個重複的鍵,數據庫會給你帶來麻煩。一個六個,另外六個。

0

下應該做

INSERT INTO message_log (message, from_id, to_id, match_id, unix_timestamp, own_account) 
SELECT 'hi', 'tom', 'tom', '55640ec48a2aecab0e3c096c556f5435f4bb054c68930040', 33333, TRUE 
WHERE NOT EXISTS (SELECT 1 FROM message_log WHERE message = 'hi' AND from_id = 'tom' 
    AND to_id = 'tom' AND match_id = '55640ec48a2aecab0e3c096c556f5435f4bb054c68930040' 
    AND unix_timestamp = 33333) 

但是它缺乏styke:自助查詢。

也許像下面這樣可能適用:

INSERT ... 
ON DUPLICATE KEY UPDATE own_account = own_account; 
相關問題