如果表b中的行不存在,如何删除表a和表b中的行

llycmphe  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(410)

我有两个表,如果表b中不存在a.itemid,我需要从两个表中删除行
我试过做:
从不存在的a,b中删除a,b(从b中选择*,其中b.cid=a.itemid);
但我不能得到错误:错误代码:1093。不能在from子句中为update指定目标表“b”
感谢您的帮助!
我有以下表格:

  1. Table A
  2. +--------+--------+-------------+
  3. |catId | itemID | lastModified|
  4. +--------+--------+-------------+
  5. | 167262 | 678909 | 2017-10-01 |
  6. | 167262 | 986785 | 2012-01-03 |
  7. | 143210 | 456776 | 2018-04-30 |
  8. | 143210 | 345676 | 2019-06-14 |
  9. | 143210 | 010836 | 2016-03-09 |
  10. | 379588 | 883567 | 2019-03-04 |
  11. +--------+--------+-------------+
  12. Table B
  13. +--------+----------+-------+
  14. | cid |locationid| Type |
  15. +--------+----------+-------+
  16. | 678909 | 1 | a |
  17. | 986785 | 1 | a |
  18. | 143210 | 2 | b |
  19. | 883567 | 3 | a |
  20. +--------+----------+-------+ ```
  21. My resulting tables would be :
  22. Table A
  23. +--------+--------+-------------+
  24. |catId | itemID | lastModified|
  25. +--------+--------+-------------+
  26. | 167262 | 678909 | 2017-10-01 |
  27. | 167262 | 986785 | 2012-01-03 |
  28. | 379588 | 883567 | 2019-03-04 |
  29. Table B
  30. +--------+----------+-------+
  31. | cid |locationid| Type |
  32. +--------+----------+-------+
  33. | 678909 | 1 | a |
  34. | 986785 | 1 | a |
  35. | 883567 | 3 | a |
  36. +--------+----------+-------+
kgqe7b3p

kgqe7b3p1#

如果表b中不存在a.itemid,我需要从两个表中删除行
如果 itemId 不匹配,则中没有行 B . 所以,你只需要删除 A . 所以:

  1. DELETE a FROM a
  2. WHERE NOT EXISTS (SELECT 1
  3. FROM B b
  4. WHERE b.cid = a.itemID
  5. );
jw5wzhpr

jw5wzhpr2#

您还可以使用delete-anti-join来表达您的逻辑:

  1. DELETE a
  2. FROM A a
  3. LEFT JOIN B b ON b.cid = a.itemID
  4. WHERE b.cid IS NULL;

相关问题