SQL:根据 ID 删除 table 中的项目,该 ID 也出现在另一个 table 中

SQL: delete items from table based on their ID, which also appears in another table

长话短说,我有一个优惠券系统项目。 在里面我有公司,优惠券和客户。 他们所有的数据都保存在一个基于 apache derby 的 SQL 数据库中。 例如: 公司 table 上有一家公司。有 id, name, password, email 优惠券 table 上有优惠券。有 id, title, price 等。 只有公司可以创建优惠券,它所做的,不仅是在上面提到的优惠券 table 上创建,它还会填充第二个 'index' table,加入公司和优惠券= company_coupon。有 company_id、coupon_id

现在项目中的其他一切都运行良好,table我的老师检查了一切,一切都配置正确。

我下一步要做什么,但似乎无法弄清楚语法是: 当我删除一家公司时,我还想从优惠券 table 中删除该公司创建的每张优惠券。为此,我在 company_coupon table 中搜索 company_id 匹配项,并根据与它们配对的 coupon_id 进行删除。

我正在尝试这个语句:

String sql = "DELETE FROM coupon INNER JOIN company_coupon ON id = company_coupon.coupon_id WHERE company_coupon.company_id = "

sql += companyObject.getId();

<-- 方法正在获取一个对象,我可以访问它的 ID,但我尝试对特定公司 ID 进行硬编码,但仍然..

相同的错误不断以不同的形式出现:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "INNER" at line 1, column 8.

我在这里和其他地方在线搜索,建议在 DELETE 后添加一个 'alias'。得到同样的错误,指向那个额外的词: "DELETE c FROM coupon INNER JOIN company_coupon ON id = company_coupon.coupon_id WHERE company_coupon.company_id = " ---->>

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "c" at line 1, column 8.


有什么想法吗? :(

您可能需要两个删除语句:

delete from company where id=1;
delete from company_coupon where id_company=1;

如果您的数据库支持外键级联删除,您可能只需要一个删除语句。

看看:http://sqlfiddle.com/#!7/86102/6(单击 "Run SQL" 并向下滚动到结果底部,尝试更改 sql你自己)

已解决:

String sql = "DELETE FROM customer_coupon WHERE coupon_id IN (SELECT company_coupon.coupon_Id FROM company_coupon WHERE company_coupon.company_id = ";
sql += comp.getId();
sql += ")";