![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос
Сергей © (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 могут меняться). Не хотелось бы прибегать к помощи ХП или анализа в клиенте, хотелось бы сформировать один запрос к уже имеющимся данным.