Как я могу использовать объединение в SQL для удаления записи? - PullRequest
0 голосов
/ 23 марта 2019

У меня проблема с моей программой. Я пытаюсь удалить запись из таблицы, используя соединение с 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.

1 Ответ

1 голос
/ 23 марта 2019

В MySQL / MariaDB у вас есть выбор:

  • Вы можете использовать ORDER BY и LIMIT, а 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...