2013-10-17 35 views
1

我要做一个复杂的删除语句,看起来像这样:sqlite的delete语句与JOIN的UNION

DELETE FROM 
(Select t1._id, t1.subject, t1.predicate, t1.object from t1 
INNER JOIN t1 AS t2 ON t1.subject=t2.subject 
WHERE t2.object='ID20447_325762212' 
UNION 
Select t1._id, t11.subject, t1.predicate, t1.object from t1 
INNER JOIN t1 AS t2 ON t1.object=t2.subject 
WHERE t2.object='ID20447_325762212') 

SQLitedabatase#删除(表,选择selectionArgs两个)是不可用的,我认为。没有办法有联盟和联盟。 SQLiteQueryBuilder与setTables(joinString)和UNIONs一起使用subQuery()和Unionquery进行连接,但仅限于selectqueries而非delete。

它是如何工作的?

[更新] 我可以通过在两个删除语句中分隔两个子查询来降低复杂性,但每个人都有一个联接,所以这不是解决方案。那也不管用。

[update2] 下面是我想要删除的表中的行的屏幕截图。 updates screenshot from db-table

在我的应用程序中,我有ID ... 2328(第2行)和该屏幕截图中的行所表示的属性(关系)的对象。该关系针对的是一个ID为212的对象。我必须删除该对象和所有属性

+2

您的查询是没有意义的。假装是什么?用言语解释! –

+0

并且*您要删除哪条*记录?那些来自't1',或者来自't2'的呢? –

+0

我正在准备一个小截图并编辑我的问题。一会儿 – Michael

回答

2

您可以在子查询中使用复杂的选择。 在一般情况下,它应该是这样的:

DELETE FROM SomeTable WHERE _id IN (SELECT _id FROM ...complex query...) 

然而,这种特殊的查询是不是很复杂毕竟:

DELETE FROM t1 
WHERE subject = (SELECT subject FROM t1 WHERE object = 'ID20447_325762212') 
    OR object = (SELECT subject FROM t1 WHERE object = 'ID20447_325762212') 
+0

你对'DELETE FROM t1 WHERE object ='ID20447_325762212''的回答有什么不同? –

+0

@LS_dev这将只删除ID为19362的记录。 –

+0

并且您的查询将会... ???我不是在开玩笑,我真的不理解! –