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

问题描述 投票:0回答:2

长话短说,我有一个优惠券系统项目。在其中我有公司,优惠券和客户。所有数据都保存在SQL DB中,基于apache derby。例如:公司表上存在公司。有优惠券表上有id,姓名,密码,电子邮件优惠券。有ID,标题,价格等。只有公司可以创建优惠券,它的作用,不仅是在上面提到的优惠券表上创建,它还填充第二个'索引'表,加入公司和优惠券= company_coupon。有company_id,coupon_id

现在,项目中的其他所有内容都运行得很漂亮,我的老师会检查表格,并且所有内容都配置正确。

我接下来想做什么,似乎无法弄清楚的语法是:当我删除公司时,我还想从优惠券表中删除该公司创建的每张优惠券。我这样做是通过在company_coupon表中搜索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:语法错误:在第1行第8列遇到“INNER”。

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

java.sql.SQLSyntaxErrorException:语法错误:在第1行第8列遇到“c”。


有任何想法吗? :(

java sql derby
2个回答
0
投票

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

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

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

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


0
投票

解决了:

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 += ")";
© www.soinside.com 2019 - 2024. All rights reserved.