2015-10-06 171 views
2

我有一個查詢在SQLite中工作,但它不在MySQL中工作。「WHERE NOT EXISTS」和「SELECT 1 FROM」不起作用的組合

我使用PHP,PDO,SQLite的& MySQL的

下面是該查詢:

INSERT INTO mytable (id, name, tag, timestamp) 
    SELECT 11, 'Legio', 'LR', 1234567 
     WHERE NOT EXISTS (
      SELECT 1 FROM mytable 
       WHERE id = 11 AND name = 'Legio' AND tag = 'LR' AND timestamp = (
        SELECT max(timestamp) FROM mytable WHERE id = 11)) 

結果是一條錯誤消息:

附近「WHERE語法錯誤NOT EXISTS(SELECT 1 from mytable WHERE id = 11 AND name'at line 3.

這個查詢在MySQL中有什麼問題?

是否有可能使這條語句適用於MySQL和SQLite?

+1

的可能的複製[如何「插入如果不存在」在MySQL?(http://stackoverflow.com/questions/1361340 /如何在MySQL中插入if-not-exists) –

+0

我正在尋找正在使用SQLite和MySQL的正確語句。 – lukesky333

回答

-1

它應該是:

SELECT 11, 'Legio', 'LR', 1234567 FROM `table_name` WHERE NOT EXISTS... 

你錯過了FROM。

+0

我認爲不是......我不從任何表中選擇這些值。此聲明在SQLite中工作。 – lukesky333

+0

嘗試一下,如果可以的話,也許它期待一個FROM - 你可以有任何表'table_name' – itoctopus

1

使用WHERE子句時,您需要從表名中進行選擇。既然你不是真正從一個真正的表中選擇,你可以使用特殊的表名DUAL

INSERT INTO mytable (id, name, tag, timestamp) 
SELECT 11, 'Legio', 'LR', 1234567 
FROM DUAL 
WHERE NOT EXISTS (
    SELECT 1 FROM mytable 
    WHERE id = 11 AND name = 'Legio' AND tag = 'LR' 
     AND timestamp = (
      SELECT max(timestamp) FROM mytable WHERE id = 11)) 
相關問題