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 += ")";
长话短说,我有一个优惠券系统项目。 在里面我有公司,优惠券和客户。 他们所有的数据都保存在一个基于 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 += ")";