我試圖避免編寫不同的SQL查詢來實現以下場景選擇:sqlite的 - 選擇或插入並在一個statment
我有一個表稱爲值:
值:
id INT (PK)
data TEXT
我想檢查的表存在一定的數據,如果是返回它的ID,如果不存在的話,那麼插入它並返回它的ID。
(非常)天真的方法是:
select id from Values where data = "SOME_DATA";
如果ID不爲空,大量使用它。 如果id爲null,則:
insert into Values(data) values("SOME_DATA");
,然後再次選擇它,看看它的ID或使用返回的ID。
我試圖使上述功能在同一行。 我覺得我越來越近,但我不能讓它尚未: 到目前爲止,我得到這個:
select id from Values where data=(COALESCE((select data from Values where data="SOME_DATA"), (insert into Values(data) values("SOME_DATA"));
我試圖採取的事實,即第二個選擇將返回null,那麼將返回COALESCE的第二個參數。目前爲止沒有成功。我錯過了什麼?
提醒,這是一個sqlite3的引擎! :P
謝謝!
爲什麼MySQL標記? –
有很多相似的地方,也許答案將來自MySQL的線程:P – user1782427
你想要的行爲是供應商特定的。一些供應商提供了一種方法來從插入/更新命令返回插入/刪除值。例如,在SQL Server可以輸出使用OUTPUT子句沒有鎖定一個新的ID,而MySQL的有LAST_INSERT_ID返回最後自動生成的ID –