В настоящее время я использую Jooq для проекта, но мне нужен способ игнорировать повторяющиеся ключи вставки.Jooq - Ignore Duplicates
У меня есть массив объектов, которые я хочу записать в таблицу, но если они уже существуют, определяемые составным уникальным индексом в START_TS и EVENT_TYPE, я хочу, чтобы вставка молчала.
Мой код выглядит примерно так:
InsertValuesStep<MyRecord> query = fac.insertInto(MY_REC,
MY_REC.START_TS,
MY_REC.STOP_TS,
MY_REC.EVENT_DATA,
MY_REC.EVENT_TYPE,
MY_REC.PUBLISHED_TS,
MY_REC.MY_ID
);
for(int i=0;i<recs.length;i++)
{
MyClass evt = recs[i];
query.values(
new java.sql.Date(evt.startTS.getTime()),
(evt.stopTS == null) ? null : new java.sql.Date(evt.stopTS.getTime()),
evt.eventData,
evt.type.name(),
date,
id)
}
query.execute();
Решение, как это было бы идеально: https://stackoverflow.com/a/4920619/416338
я сообразить, мне нужно добавить что-то вроде:
.onDuplicateKeyUpdate().set(MY_REC.EVENT_TYPE,MY_REC.EVENT_TYPE);
Но что бы я ни добавьте его, похоже, выдает ошибку для дубликатов.
Я не знаю, этот инструмент, но в простом SQL вы можете сделать что-то вроде 'INSERT INTO таблицы (SELECT col1 , col2 FROM (VALUES (val1, val2)) как temp (col1, col2) ГДЕ НЕ СУЩЕСТВУЕТ (SELECT '1' FROM table, где col1 = val1)) ', который имеет силу для работы почти во всех РСУБД (или небольшой вариации). –
@LukasEder 'INSERT INTO t (column1, ... columnN) SELECT ... FROM некоторых других таблиц ...' поддерживается почти всеми (если не все) СУБД. –
@ypercube: Я, должно быть, пропустил 'SELECT' ... мой плохой –