SQL:根据表中的ID删除表中的项,该ID也出现在另一个表中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL:根据表中的ID删除表中的项,该ID也出现在另一个表中相关的知识,希望对你有一定的参考价值。
长话短说,我有一个优惠券系统项目。在其中我有公司,优惠券和客户。所有数据都保存在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”。
有任何想法吗? :(
您可能需要两个删除语句:
delete from company where id=1;
delete from company_coupon where id_company=1;
如果您的数据库支持外键上的级联删除,则可能只需要一个delete语句。
看看:http://sqlfiddle.com/#!7/86102/6(单击“运行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 += ")";
以上是关于SQL:根据表中的ID删除表中的项,该ID也出现在另一个表中的主要内容,如果未能解决你的问题,请参考以下文章