Russian Qt Forum
Ноябрь 01, 2024, 03:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вставка строки по условию  (Прочитано 7992 раз)
manarch
Гость
« : Ноябрь 13, 2014, 11:06 »

Кто может подсказать как вставить строку по "условию". в одном запросе Т.е. если есть строка с заданными значениями то не добавлять.
что то типа

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

если в таблице уже есть Вася Пупкин то строку не вставлять, а если нету - то добавить.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 13, 2014, 11:10 »

Какая СУБД? В некоторых есть insert or update.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
manarch
Гость
« Ответ #2 : Ноябрь 13, 2014, 13:14 »

Нужно именно добавление новой строки, а не изменение существующей. БД не важно.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 13, 2014, 13:17 »

Если чистый sql, оторванный от СУБД, то никак (на сколько я знаю). Либо 2 запроса, либо затачиваться под конкретную СУБД.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #4 : Ноябрь 13, 2014, 13:21 »

Если такой возможности нет в СУБД (а на самом деле мало где есть), то там будет далеко не 2 запроса. Опять же, если в СУБД такая фича есть, то будет либо обновление, либо добавление. Только добавление - пишите свою хранимую процедуру и обращайтесь к ней.
Записан
RSATom
Гость
« Ответ #5 : Ноябрь 13, 2014, 13:39 »

http://en.wikipedia.org/wiki/Merge_%28SQL%29

ну или гуглим upsert + "название СУБД"
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #6 : Ноябрь 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
« Последнее редактирование: Ноябрь 13, 2014, 14:34 от Johnik » Записан
RSATom
Гость
« Ответ #7 : Ноябрь 13, 2014, 14:29 »

кстати, еще один концептуально правильный вариант - первичные/уникальные ключи - это в случае если дубликаты в принципе недопустимы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 23.