程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SELECT 和 INNER JOIN 里面的 WHERE IN ()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决SELECT 和 INNER JOIN 里面的 WHERE IN ()?

开发过程中遇到SELECT 和 INNER JOIN 里面的 WHERE IN ()的问题如何解决?下面主要结合日常开发的经验,给出你关于SELECT 和 INNER JOIN 里面的 WHERE IN ()的解决方法建议,希望对你解决SELECT 和 INNER JOIN 里面的 WHERE IN ()有所启发或帮助;

我需要做这样的事情

deletE FROM order 
WHERE ID IN  (  SELECT order.ID 
            FROM db.order 
            INNER JOIN db.product ON product.ID = order.product_ID
            WHERE product.date < UNIX_timestAMP(DATE_SUB(Now(),INTERVAL 6 YEAR)) liMIT 10000);

然而这行不通。有没有办法做到这一点,或者可能有不同的方式?我确实需要删除超过 6 年的数据,所以如果有其他方法,我很乐意尝试。

解决方法

@H_307_2@mySql 不支持 LIMIT 用于多表 deletE 语句,因此您可以做的是在子查询中应用限制,然后加入 order

deletE o 
FROM `order` o 
INNER JOIN (
  SELECT o.id FROM `order` o INNER JOIN product p 
  ON p.product_id = o.id
  WHERE p.date < UNIX_timestAMP(DATE_SUB(NOW(),INTERVAL 6 YEAR)) 
  LIMIT 10000
) t ON t.id = o.id;
,

要使用 JOINS 删除,您可以使用别名来定位应进行删除的表。我想你可以在文档中找到,但语法是:

deletE o FROM
  order AS o
JOIN
  product AS p ON
    product.id = order.product_id
    AND product.date < UNIX_timestAMP(DATE_SUB(NOW(),INTERVAL 6 YEAR))

这只会从订单表中删除记录。

文档:https://dev.mysql.com/doc/refman/8.0/en/delete.html

寻找“多表删除”

然不确定您想对 10000 的限制做什么,但就像 Lelio Faieta 建议的那样,您可以为此使用子查询:

deletE o FROM
  order AS o
JOIN
  (SELECT o.id
  FROM order
  JOIN
    product AS p ON
      product.id = order.product_id
      AND product.date < UNIX_timestAMP(DATE_SUB(NOW(),INTERVAL 6 YEAR))
  LIMIT 10000
  ) AS s ON s.id = o.id

大佬总结

以上是大佬教程为你收集整理的SELECT 和 INNER JOIN 里面的 WHERE IN ()全部内容,希望文章能够帮你解决SELECT 和 INNER JOIN 里面的 WHERE IN ()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。