2011-12-22 113 views
0

我正在研究支持SQLite的數據庫查詢抽象層。DELETE ... LIMIT子句(SQL)的解決方法

不幸的是,SQLite不支持DELETE(和UPDATE等)查詢中的LIMIT子句 - 除非在更新版本中使用特殊標誌進行編譯。

那麼是否有任何解決方法可以實現,以便仍然可以支持該查詢類型?

+0

可能的重複[你如何啓用限制DELETE在SQLite?](http://stackoverflow.com/questions/1824490/how-do-you-enable-limit-for-delete-in-sqlite) – Ralf 2017-04-05 13:59:05

回答

1

儘管在您的SQLite構建中並不支持LIMIT,但您可以通過實現在子查詢中使用LIMIT選擇來識別將被更新或刪除的行的方法來重現行爲。您應該意識到這會導致性能下降,而不是使用啓用LIMIT的SQLite版本,但如果您需要這些功能,這看起來像是一個可行的選項。

如果您正在處理大量數據或發現由於嘗試此操作而導致的性能太嚴重,那麼另一個選擇是使用LIMIT選擇來填充臨時表,然後作爲該表的一部分與該表聯接您的刪除或更新。

+0

我喜歡這個答案。 :) 但是還有一件事:根據我在查詢對象中獲得的數據,我無法知道主鍵列 - 是否有任何解決方法? – Franz 2011-12-22 10:59:38

+0

@弗蘭茲 - 那是一種獨特的情況。如果您收到的這些通用數據無法分辨您的目標架構的PK是什麼,那麼您可能會被卡住。我唯一能想到的是,如果給出一個元組屬性的完整列表,你可以嘗試一個WHERE並指定你擁有的每個屬性。當然,這隻有在表格保證有唯一的元組時纔有效。 – Carth 2011-12-22 14:48:44

+0

我想我只是不支持DELETE ... LIMIT子句。 Gah,SQLite讓我氣死了! – Franz 2011-12-22 15:21:18