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也出现在另一个表中的主要内容,如果未能解决你的问题,请参考以下文章

oracle SQL left join()或full out join()根据键排除记录

sql 从表中选择未出现在第二个表中的所有内容

用SQL怎样根据一个表种的字段ID查出另一个表中的数据?

用sql语句删除表中的某个ID

根据唯一 ID 列表删除 Big Query 表中的批量行

删除 SQL 表中的分层数据