Russian Qt Forum

Программирование => Базы данных => Тема начата: manarch от Ноябрь 13, 2014, 11:06



Название: Вставка строки по условию
Отправлено: manarch от Ноябрь 13, 2014, 11:06
Кто может подсказать как вставить строку по "условию". в одном запросе Т.е. если есть строка с заданными значениями то не добавлять.
что то типа

SELECT INTRO "table" ("name", "firstname", "date") VALUES("Вася", "Пупкин", 1900.01.01) WHERE "name"<>"Вася" AND "firstname"<>"Пупкин";

если в таблице уже есть Вася Пупкин то строку не вставлять, а если нету - то добавить.


Название: Re: Вставка строки по условию
Отправлено: Пантер от Ноябрь 13, 2014, 11:10
Какая СУБД? В некоторых есть insert or update.


Название: Re: Вставка строки по условию
Отправлено: manarch от Ноябрь 13, 2014, 13:14
Нужно именно добавление новой строки, а не изменение существующей. БД не важно.


Название: Re: Вставка строки по условию
Отправлено: Пантер от Ноябрь 13, 2014, 13:17
Если чистый sql, оторванный от СУБД, то никак (на сколько я знаю). Либо 2 запроса, либо затачиваться под конкретную СУБД.


Название: Re: Вставка строки по условию
Отправлено: Hellraiser от Ноябрь 13, 2014, 13:21
Если такой возможности нет в СУБД (а на самом деле мало где есть), то там будет далеко не 2 запроса. Опять же, если в СУБД такая фича есть, то будет либо обновление, либо добавление. Только добавление - пишите свою хранимую процедуру и обращайтесь к ней.


Название: Re: Вставка строки по условию
Отправлено: RSATom от Ноябрь 13, 2014, 13:39
http://en.wikipedia.org/wiki/Merge_%28SQL%29

ну или гуглим upsert + "название СУБД"


Название: Re: Вставка строки по условию
Отправлено: Johnik от Ноябрь 13, 2014, 14:26
можно примерно так:
Код:
INSERT INTO table_name (c1, c2)
SELECT 'вася', 'пупкин' WHERE NOT EXISTS (SELECT * FROM table_name WHERE с1 = 'вася' AND с2 = 'пупкин')

проверено на mssql
должно так же работать с sqlite и postgresql


Название: Re: Вставка строки по условию
Отправлено: RSATom от Ноябрь 13, 2014, 14:29
кстати, еще один концептуально правильный вариант - первичные/уникальные ключи - это в случае если дубликаты в принципе недопустимы.