Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление новой записи если её нет в базе данных, Почему нет WHERE в операторе INSERT? 
V
    Опции темы
Дерзающий
Дата 30.5.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Есть таблица ListSlov c текстовыми полями Slovo и Znachenie. Так вот нужно добавить новое слово с учётом того что его нет в таблице. Не получается ни чего, как только не пробовал, ведь нужно как то задать условие и проверку на наличие в таблице этого слова. Всё вылазиит на манер С++ а не как в SQL. Люди добрые помогите с SQL запросом. Куда всунуть INSERT INTO ListSlov (Slovo,Znachenie) VALUES (:Slovo,:Znachenie); 
PM MAIL   Вверх
skyboy
Дата 30.5.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 2
Всего: 260



[Б]Дерзающий[/Б], что за СУБД? 
Код

INSERT INTO ... SELECT ... 

в наличии? 
PM MAIL   Вверх
pandrew
Дата 30.5.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Если у тебя Slovo Primary Key, то INSERT автоматом не будет срабатывать для совпад. значений. 
PM MAIL   Вверх
_hunter
Дата 30.5.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



а почему бы перед вставкой ни выполнить запрос-проверку? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Artemon
Дата 30.5.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20




SELECT SLOVO FROM LISTSLOV WHERE SLOVO = 'ВАТА'

далее


if( Qaery->RecordCount )ShowMessage("Слово уже есть");
else                                 ShowMessage("Слова нет");


Дальше сам думай smile

 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Дерзающий
Дата 30.5.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



pandrew, так и есть но не будет ли возникать в результате этих действий ошибка.

_hunter, можно, но этим приёмом много времени съедается.

skyboy,  Access 2000


Как то можно же одним запросом и проверить и вставить запись.

Добавлено @ 21:45 
Да и 
INSERT INTO ... SELECT ... 
не подходит, ведь это вставка группы записей из другой таблицы в данную, а мне нужно 1 запись вставить с проверкой на наличие. То есть если записи нет то её вставить если она есть то ненадо. 
PM MAIL   Вверх
Fazil6
Дата 30.5.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата

Как то можно же одним запросом и проверить и вставить запись.

нет
SQL - язык запросов. В его задачи не входит организация подобного поведения. 
PM MAIL   Вверх
skyboy
Дата 30.5.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 2
Всего: 260



Код

INSERT INTO table(slovo,znachenie) SELECT :slovo,:znachenie FROM table WHERE :slovo not in (SELECT slovo FROM table) AND znachenie in (SELECT znachenie FROM table LIMIT 1)

Было бы хорошо, если бы можно было бы написать
Код

INSERT INTO table(slovo,znachenie) SELECT :slovo,:znachenie WHERE :slovo not in (SELECT slovo FROM table) 

Но боюсь(однако, не уверен) что серверу нужно явное указание таблицы, даже если выбираются только константы. Потом, чтоб не было количество вставляемых строк равно количеству строк таблицы table, я и вставил тупое условие "znachenie in (SELECT znachenie FROM table LIMIT 1)", которое вернёт только одну строку и наша конструкция не вставить 200-300 одинаковых копий. Возможно, очень глупо, но может натолкнёт на идеи...  
PM MAIL   Вверх
_hunter
Дата 31.5.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Дерзающий, напиши хранимую процедуру -- времени уйдет меньше... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.