2014-06-05 59 views
1

這是在Microsoft SQL Server的T-SQL上的有效語法,但不是在SQLite中,是否有一種替代語法在SQLite中具有相同的功能?SQLite是否支持「從...刪除」

DELETE FROM something 
FROM something 
INNER JOIN combinations ON something.field1=combinations.field1 
AND something.field2=combinations.field2 
--optionally more criteria and/or more joins 
WHERE combinations.field3=1234 
--or anything really, just to show some criteria could be applied here also 
+0

...'從from'? –

+0

@DerGolem:請參見:http://msdn.microsoft.com/en-us/library/ms189835.aspx,第一個用於表/對象/變量的「FROM」,第二個用於表源的「FROM」可選加入) –

+0

哇!從未在我的生活中遇到過這樣的語法......;)我和Access,Oracle,SQL Server,MySql和SQLite一起工作。你永遠不會完成學習... –

回答

2

在一般情況下,將整個連接成一個子查詢查找該行的主鍵被刪除:

DELETE FROM something 
WHERE id IN (SELECT something.id 
      FROM something 
      JOIN combinations ON something.field1=combinations.field1 
           AND something.field2=combinations.field2 
      WHERE combinations.something=1234) 

如果您有複合主鍵,則可以使用rowid代替:

DELETE FROM something 
WHERE rowid IN (SELECT something.rowid 
       FROM something 
       JOIN combinations ON something.field1=combinations.field1 
           AND something.field2=combinations.field2 
       WHERE combinations.something=1234) 

如果你有一個複合主鍵,您所創建的表作爲WITHOUT ROWID表,你不得不重新改寫加入成爲相關子查詢:

DELETE FROM something 
WHERE EXISTS (SELECT 1 
       FROM combinations 
       WHERE field1 = something.field1 
       AND field2 = something.field2 
       AND field3 = 1234) 
2

在這裏,你有一個選擇:

DELETE FROM slave 
where slave.master_id in (select master.id from master where master.something=1234) 
+0

啊,看,我可能已經過分簡化了我的例子。在我使用它的地方,JOIN的ON部分可能比單個值更復雜。 –

+0

@StijnSanders你能舉個例子嗎? – Jens

+0

請參閱問題的更新。 –