Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL запрос


Страницы:   1 2

Сергей ©   (2015-05-21 15:28:00) 

Уважаемые мастера, есть вопрос. Имеется таблица :
id  p     s     n
1  100  5     200
2  100  5     201
3  100  6     200
Подскажите(если это возможно) как создать единый запрос, если известно, что при первом обращении p=100,s=5,n=200 и 201, а при втором обращении p=100,s=6,n=200


~AQUARIUS~   (2015-05-29 15:36:00) [1]


> Нет, не так. Я хочу исключить повторяющиеся записи.


1. Строите уникальный индекс по (p, s, n)
2. RTFM по вашему движку БД - ищете конструкцию вставки с игнорированием либо вставки с обновлением, все соверменные движки такую имеют.
Например в MySQL есть целые два варианта: INSERT IGNORE и INSERT ... ON DUPLICATE KEY UPDATE. Обе конструкции можно приспособить для игнорирования дубликатов при вставки


Юрий Зотов   (2015-05-22 14:40:00) [2]

>  Сергей   (21.05.15 21:12) [30]

Если ОНО решило вопрос путем проверки на клиенте, то ОНО его НЕ решило. Даже еще хуже - ОНО создало видимость решения, а решения на самом деле нет. И когда-нибудь это обязательно аукнется ошибкой.

Вам уже несколько раз сказали, что нужен constraint. И правильно сказали. Почему Вы не хотите слушать дельные советы - непонятно.


sniknik   (2015-05-21 21:24:00) [3]

итоговый запрос покажешь?
может по нему удастся вопрос, что же было нужно, восстановить.


кгшзх   (2015-05-21 21:19:00) [4]

спасибо не надо. просто будешь должен.


Сергей   (2015-05-21 21:12:00) [5]

Да не ломайте вы копья, ОНО вопрос, вопреки вашим дельным советам, все же решило :-)


кгшзх   (2015-05-21 20:49:00) [6]

о чорт. я же совершил ошибку.


ухты   (2015-05-21 20:32:00) [7]

ну так n это те что 200 2001 а у вас 5 6, тоже не правильно, запросы никогда ничего не вернут :)

что человеку надо мне не понятно тоже, скорее всего юники помогут
это я так..


кгшзх   (2015-05-21 20:22:00) [8]

да дад.

Вот исходное:

Уважаемые мастера, есть вопрос. Имеется таблица :
id  p     s     n
1  100  5     200
2  100  5     201
3  100  6     200
Подскажите(если это возможно) как создать единый запрос, если известно, что при первом обращении p=100,s=5,n=200 и 201, а при втором обращении p=100,s=6,n=200


Сразу намекнули, что надо бы перевести с птичьего на русский.

Сразу после намека оно сказало, что вопрос поставлен предельно точно и полно .

Ну раз предельно точно поставлено, то в [22] предельно точно отвечено.
Могу приложить нотариально заверенный скриншот результата обеих "обращений"


ухты   (2015-05-21 20:11:00) [9]


> что и требовалось
да нет, -

> я хочу в одном запросе(s и n могут меняться).
, т.е. 1 запрос, а у вас уже 2, и только для n


Inovet   (2015-05-21 19:38:00) [10]

> [24] кгшзх ©   (21.05.15 19:08)
> этот код ему не поможет

Я же сказал - плохиш.


кгшзх   (2015-05-21 19:08:00) [11]

этот код ему не поможет потому что нужен другой код, даже если проверку уникальности делать с клиента.
потому и дал.


Inovet   (2015-05-21 18:55:00) [12]

> [22] кгшзх ©   (21.05.15 18:41)

Ты тоже плохиш, но код дал. Жаль.


кгшзх   (2015-05-21 18:41:00) [13]

при первом обращении p=100,s=5,n=200 и 201,
а при втором обращении p=100,s=6,n=200


select * from table
where n = case :p_param
               when 1 then 5
               when 2 then 6
               else null
              end

при первом "обращении" (p_param = 1) получим :
100 5 200
100 5 201

при втором "обращении" (p_param = 2) получим :
100 6 200

что и требовалось в идиотском как бы вопросе, как бы детально и как бы конкретно как бы поставленном как бы по существу.


Inovet   (2015-05-21 18:39:00) [14]

> [20] Сергей   (21.05.15 18:27)

Ну это да - умные благоразумные мальчиши-кибальчиши дают код, а здесь одни плохиши дают никчёмные советы. Жаль.


Сергей   (2015-05-21 18:27:00) [15]

Всем спасибо за никчемные ответы.


Плохиш   (2015-05-21 18:17:00) [16]


> Сергей   (21.05.15 17:40) [17]
> >кгшзхОстроумие на высоте

ты уже про индексы прочитал? Или так и будишь, как идиот, одно и тоже долдонить?

> Не хотелось бы прибегать к помощи ХП или анализа в клиенте

сколько вумных словей-то.


Inovet   (2015-05-21 18:14:00) [17]

> [17] Сергей   (21.05.15 17:40)
> а до дела что-то не доходит пока

Из тебя вытягивают клещами реальную проблему, вытянули нечто уже ближе к реальности, дали ответ, а ты всё ещё не видишь его. Повторю - констрейнт спасёт ОРД.


Сергей   (2015-05-21 17:40:00) [18]

>кгшзх
Остроумие на высоте, а до дела что-то не доходит пока. Пустобрехством заниматься - не мешки ворочать. Так ведь, взрослый человек ? :-)


кгшзх   (2015-05-21 17:35:00) [19]

заходят два юзера.
оба хотят вставить 100 7 300
для обоих ты проверяешь комбинацию и обоим сообщаешь, что такой еще нет.
и оба юзера благополучно вставляют свои 100 7 300

/*
а все потому что кто-то не создал констрейнт уникального индекса, а занимается херней с проверками, актуальность результатов которых уже через миллисекунду становится неактуальной */


Сергей   (2015-05-21 17:27:00) [20]

>Jeer
Нет, не так. Я хочу исключить повторяющиеся записи. Есть в таблице : p = 100,
s = 5, n = 200 и 201 и пользователь снова пытается ввести аналогичное. Поэтому и хочу проверить есть ли такое. Если есть - новая запись не создается. Иными словами если p = 100,s = 5, n = 200 и 201, а пользователь выбирает туже комбинацию, то запись не должна создаваться. Но спросить о наличии такой комбинации я хочу в одном запросе(s и n могут меняться). Не хотелось бы прибегать к помощи ХП или анализа в клиенте, хотелось бы сформировать один запрос к уже имеющимся данным.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо