#java #mysql #jooq
Вопрос:
Я создал этот запрос jOOQ для удаления определенных строк из таблицы :
DSLContext ctx = DSL.using(c, SQLDialect.MYSQL);
ctx.deleteFrom(table("filestorage").as("fis"))
.where(
field("fis.file_id").eq(storageAudioFile.getId().toString())
.and(field("fis.scheme").eq(storageAudioFile.getScheme()))
.and(field("fis.updated").eq(storageAudioFile.getUpdated()))
).limit(1).execute();
Это создает запрос, начинающийся с delete fis from [...]
вместо delete fis.* from [..]
:
delete `fis` from filestorage as `fis` where (fis.file_id = ? and fis.scheme = ? and fis.updated = ?) limit ?
Я не могу найти много информации об этом в документации, и я пытался изменить table("filestorage")
ее с помощью различных синтаксисов, но безуспешно.
Как заставить jOOQ генерировать delete fis.* from [...]
в этом запросе?
Комментарии:
1. Какова цель этого синтаксиса в MySQL?
2. @LukasEder цель состоит в том, чтобы удалить все строки, соответствующие критериям запроса, если вы это имеете в виду. Я действительно не возражаю, если он генерирует
delete fis.* from [...]
или простоdelete from [...]
— до тех пор, пока MySQL не выдает ошибку 🙂3. @LukasEder похоже, это сводится к моей собственной глупости. Я не могу использовать
limit
в сочетании с удалением нескольких таблиц. Мой запрос на самом деле не является удалением из нескольких таблиц, но MySQL интерпретирует его как один, потому что я используюdelete [table] from [...]
. Вот почему он терпит неудачу. Так что это действительно не имеет ничего общего с jOOQ, а скорее с использованиемlimit
в сочетании с синтаксисом удаления нескольких таблиц.4. Вы можете ответить на свой собственный вопрос здесь о переполнении стека. Возможно, кто-то еще найдет это полезным в будущем