【问题标题】:How to Delete data from 2 tables using JOIN in SQLITE如何在 SQLITE 中使用 JOIN 从 2 个表中删除数据
【发布时间】:2013-08-14 02:20:11
【问题描述】:

我有下表

我想从两个表中删除与 productId 对应的数据。我研究了 JOIN 不能与 SQLite 中的 DELETE 一起应用,所以我尝试了以下查询

DELETE FROM optionToValues WHERE optionToValues.optionId   IN
(SELECT optionToValues.optionId
FROM optionToValues 
JOIN productOptions on productOptions.optionId = optionToValues.optionId 
WHERE productOptions.product_id = 82)

但是没有执行删除操作。请给我一些建议,我们可以如何实现这一目标。任何帮助表示赞赏。

【问题讨论】:

  • 该查询实际上没有意义。您正在一组 optionIds 中寻找 product_id。也许你只想要DELETE FROM productOptions WHERE product_id = 82?如果没有,您到底想完成什么?
  • 或者您是否要删除某个产品的所有选项?
  • @323go 我必须删除 productoptions 然后该产品也
  • “从 2 个表中删除数据”不可能使用单个语句。您可以通过外键操作来完成此操作(例如,删除您将获得无效关系的RESTRICT,或CASCADE 跨表删除):sqlite.org/foreignkeys.html#fk_actions

标签: android sqlite join subquery android-sqlite


【解决方案1】:

你会想要这个 --

DELETE 
  FROM optionToValues
 WHERE optionId IN ( SELECT optionId FROM productOptions WHERE product_id = 82 )

DELETE
  FROM productOptions
 WHERE product_id = 82

【讨论】:

    【解决方案2】:

    听起来optionToValues.optionid 应该是使用ON DELETE CASCADEproductOptions.optionID 的外键。有了这个,当您从productOptions 中删除一个条目时,它在optionToValues 中的相应条目将为您删除。

    或者,您可以在 productOptions 上定义一个触发器,该触发器将删除 optionToValues 行。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多