我想插入一個名爲「foo」的標籤,除非它已經存在。所以我構建了以下查詢:爲什麼我不能在INSERT中使用WHERE NOT EXISTS?
INSERT INTO "tag" ("name") VALUES ('foo')
WHERE NOT EXISTS (SELECT 1 FROM "tag" WHERE ("tag"."name" = 'foo'));
但這將失敗,並出現以下錯誤:
ERROR: syntax error at or near "WHERE"
LINE 1: INSERT INTO "tag" ("name") VALUES ('foo') WHERE NOT EXISTS (...
^
我不明白的地方與查詢問題。特別是,因爲我可以提供一個子查詢,而不是VALUES
突然查詢是完全沒有問題:
INSERT INTO "tag" ("name") SELECT 'foo' AS name
WHERE NOT EXISTS (SELECT 1 FROM "tag" WHERE ("tag"."name" = 'foo'));
這導致:
Query returned successfully: 0 rows affected, 11 ms execution time.
它的0行,因爲標籤已經存在。
[MySQL的條件插入]的可能重複(http://stackoverflow.com/questions/913841/mysql-conditional-insert) –
@BasileStarynkevitch:關於併發問題,MySQL的行爲不同。 –