繁体   English   中英

如何在 SQL 中使用 join 删除记录?

[英]How can I use join in SQL to delete record?

我的程序有问题我正在尝试使用 Java 连接从表中删除一条记录,这是我的代码:

try{
            String sql ="DELETE f FROM facture f INNER JOIN client c ON f.idClient=c.id WHERE c.nom= ? ORDER BY idFact DESC LIMIT 1";
            PreparedStatement pr = conn.prepareStatement(sql);
            pr.setString(1,nom);
            pr.executeUpdate();
            System.out.println("supprimer");
        }catch (SQLException e){
            e.printStackTrace();
        }

这是错误:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ORDER BY idFact DESC LIMIT 1' at line 1.

在 MySQL/MariaDB 中,您有一个选择:

  • 您可以使用ORDER BYLIMIT ,而FROM只能引用一张表。
  • 您可以拥有一个引用多个表的FROM

解决方案? 改写查询:

DELETE FROM facture f 
    WHERE EXISTS (SELECT 1
                  FROM client c 
                  WHERE f.idClient = c.id AND c.nom = ? 
                 )
    ORDER BY f.idFact DESC
    LIMIT 1;

或者您可以使用子查询来获取要删除的行:

DELETE f
    FROM facture f JOIN
         (SELECT f.idFact
          FROM facture f JOIN
               client c
               ON f.idClient = c.id AND c.nom = ?
          ORDER BY f.idFact DESC
          LIMIT 1
         ) ff
         ON ff.idFact = f.idFact

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM