我必须做一个复杂的delete语句,如下所示:
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#delete(表,选择,selectionArgs)是不可用的。没办法加入联盟和联盟。 SQLiteQueryBuilder具有带有setTables(joinString)的JOIN和带有subQuery()和Unionquery的UNION,但仅适用于不删除的selectqueries。
它是如何运作的?
[更新] 我可以通过在两个delete语句中分离两个子查询来降低复杂性,但是每个人都有一个连接,所以这不是一个解决方案。那也不起作用。
[UPDATE2] 这是我要删除的表格行的屏幕截图。
在我的应用程序中,我有一个ID为ID的对象... 2328(第2行)和由该屏幕截图中的行表示的属性(关系)。该关系定位到id为212的对象。我必须删除该对象和所有属性
答案 0 :(得分: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')