Как игнорировать или заменять строку, если некоторые столбцы совпадают? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть такая таблица ID|MONTH|YEAR|AMOUNT|PAID|ISPAID|INDEX_ID, где INDEX_ID - это автоматически заполняемое целое число, действующее как PK и AI, а PAID|ISPAID автоматически заполняется 0,0

Проблема у меня возникает, когда я заполняю транзакция с тем же ID|MONTH|YEAR|AMOUNT Я хотел бы либо заменить, либо проигнорировать. Желательно игнорировать это. Но я все равно хотел бы знать оба.

Есть ли способ сделать это в sqlite3?

это мой текущий SQL String:

SQLStr := "INSERT OR REPLACE INTO ClientRecord(id, month, year, amount) 
            VALUES(" ir.ID "," ir.MONTH "," ir.YEAR "," ir.AMOUNT ");"

1 Ответ

1 голос
/ 14 июля 2020

Вы можете предотвратить повторную вставку, используя NOT EXISTS в строке запроса INSERT:

SQLStr := "INSERT OR REPLACE INTO ClientRecord( id, month, year, amount)
SELECT " ir.ID "," ir.MONTH "," ir.YEAR "," ir.AMOUNT "
 WHERE NOT EXISTS ( SELECT 1 
                      FROM ClientRecord 
                     WHERE id     = " ir.ID " 
                       AND month  = " ir.MONTH "
                       AND year   = " ir.YEAR "
                       AND amount = " ir.AMOUNT ");"

Demo

В качестве примечания : предпочитайте переписывать вышеуказанный запрос, используя динамический c лог-код запроса c, заменяя эти переменные вопросительными знаками, а не объединением переменных, чтобы сделать запрос более защищенным от внедрения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...