0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242

SQL запрос выборка, помогите составить

14.03.2012, 11:44. Показов 3868. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть таблица в ней два поля:
первое id, второе id_code

Вот примерно такая таблица


id id_code
1 2
1 1
1 3
2 1
2 2
2 3
3 1
3 2
4 1
Надо сделать выборку:

тоесть выбрать все id для которых
id_code=1 id_code=2 id_code=3
результат для приведеного примера

id=1
id=2


0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2012, 11:44
Ответы с готовыми решениями:

Помогите составить SQL запрос
Допустим есть таблица с 3 рядами значений: год, месяц и ср.мес. темп-ра Есть форма с полями год и месяц. При указании года и месяца...

Помогите составить SQL запрос
Существует несколько таблиц: t1, t2, t3. В каждой из них, по мимо прочих, есть поле name содержащее фамилии. Задача: выбрать из всех...

Выборка данных в случайном порядке SQL запрос
Необходима ваша помощь в формировании SQL запроса на выборку всех данных из таблицы в случайном порядке, а именно: 1. Вытаскивать...

20
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
15.03.2012, 00:23
select * from tablename where (id_code=1 or id_code=2 or id_code=3)
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
15.03.2012, 12:34  [ТС]
Цитата Сообщение от sl_play
select * from tablename where (id_code=1 or id_code=2 or id_code=3)
select * from tablename where (id_code=1 or id_code=2 or id_code=3)
Мне надо так
select * from tablename where (id_code=1 [bold]and[/bold] id_code=2 [bold]and[/bold] id_code=3), тоесть выбрать те id для которых в базе есть запись
id id_code=1
id id_code=2
id id_code=3
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
15.03.2012, 20:45
Попробуй такой запрос
SELECT DISTINCT id
FROM [italic]tableName[/italic] AS t1
WHERE t1.id_code=1
AND EXISTS (SELECT * FROM [italic]tableName[/italic] WHERE id=t1.id AND id_code=2)
AND EXISTS (SELECT * FROM [italic]tableName[/italic] WHERE id=t1.id AND id_code=3)
Тебе нужно будет заменить tableName (выделено курсивом) на имя своей таблицы.
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
16.03.2012, 21:18
bazile > а почему ты решил, что у автора темы скл-сервер?
или ты уже перестроился на 5-ю версию мускла?
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
17.03.2012, 13:32
2 sl_play
Я понял что вопрос по MySql
Просто я мало с ним работаю и могу ошибаться в плане поддержки им некоторых возможностей. Попытка не пытка в общем
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
19.03.2012, 14:17  [ТС]
Цитата Сообщение от bazile
Попробуй такой запрос
SELECT DISTINCT id
FROM [italic]tableName[/italic] AS t1
WHERE t1.id_code=1
AND EXISTS (SELECT * FROM [italic]tableName[/italic] WHERE id=t1.id AND id_code=2)
AND EXISTS (SELECT * FROM [italic]tableName[/italic] WHERE id=t1.id AND id_code=3)
Тебе нужно будет заменить tableName (выделено курсивом) на имя своей таблицы.
Если можно, то обясни етот запрос!
Дело в том, что в моей базе более 1132454 записей.
В результате комп виснет.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
19.03.2012, 15:25
Цитата Сообщение от XXXXXXX
Если можно, то обясни етот запрос!
Code
1
2
3
4
5
SELECT DISTINCT id - [bold]Выбрать неповторяющиеся значения поля id[/bold] 
FROM [italic]tableName[/italic] AS t1
WHERE t1.id_code=1 [bold]где id_code равен 1[/bold]
AND EXISTS (SELECT * FROM [italic]tableName[/italic] WHERE id=t1.id AND id_code=2) [bold]и существует запись с таким же id и id_code равной 2[/bold]
AND EXISTS (SELECT * FROM [italic]tableName[/italic] WHERE id=t1.id AND id_code=3) [bold]и существует запись с таким же id и id_code равной 3[/bold]
Цитата Сообщение от XXXXXXX
Дело в том, что в моей базе более 1132454 записей.
В результате комп виснет.
А какая у тебя версия MySql? У меня в 4.0.23 мой запрос просто не выполняется. В MSSQL таких проблем нет.
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
19.03.2012, 16:17  [ТС]
Почему не работает select * from tablename where (id_code=1 and id_code=2 and id_code=3)?
Какую СУБД посоветуеш для базы, где более 1000000 записей.
Несколько слов о MSSQL (что ето и для кого)
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
19.03.2012, 16:27
Цитата Сообщение от XXXXXXX
Почему не работает select * from tablename where (id_code=1 and id_code=2 and id_code=3)?
Сам подумай - как может одно и тоже поле одновременно равняться значениям 1, 2 и 3?
Это примерно, как если бы ты писал такой код на PHP
$id_code = 1;
if ($id_code==1 && $id_code==2 && $id_code==3)
{
echo "Почему на экран ничего не выводится?";
}

Эта ситуация, кстати, может говорить о том что ты неправильно спроектировал структуру данных в БД.

Цитата Сообщение от XXXXXXX
Какую СУБД посоветуеш для базы, где более 1000000 записей.
MySQL должен справляться с таким объемом.
Если не справляется, то тут может быть много причин:
- плохая структура таблиц в базе данных
- плохо настроенные или отсутствующие индексы для таблиц
- слабое "железо"

Цитата Сообщение от XXXXXXX
Несколько слов о MSSQL (что ето и для кого)
MSMSQL = Microsoft SQL Server. Мощная СУБД.
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
19.03.2012, 16:48  [ТС]
Спасибо за советы
Буду мучить
SELECT DISTINCT id
FROM tableName AS t1
WHERE t1.id_code=1
AND EXISTS (SELECT * FROM tableName WHERE id=t1.id AND id_code=2)
AND EXISTS (SELECT * FROM tableName WHERE id=t1.id AND id_code=3)
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
19.03.2012, 17:23
Вот точно работащий вариант (не знаю почему я сразу до него не додумался)
SELECT DISTINCT t1.id FROM tableName AS t1
JOIN tableName t2 ON (t1.id = t2.id AND t2.id_code=2)
JOIN tableName t3 ON (t1.id = t3.id AND t3.id_code=3)
WHERE t1.id_code=1

И еще один рабочий вариант предоженный моим другом
SELECT id, count(id_code) AS count_id FROM tableName GROUP BY id HAVING count_id = 3
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
20.03.2012, 13:27
to XXXXXXX: Проставь индексы на "id", "id_code" и пользуйся лимитом, при твоих объемах может виснет не мускул а броузер например.
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
20.03.2012, 13:31
Мне больше понравился вариант "друга bazile", а то тройное объединение при таких объемах может и "нагнуть" сервак базы
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
20.03.2012, 13:38
Цитата Сообщение от crumb
Мне больше понравился вариант "друга bazile", а то тройное объединение при таких объемах может и "нагнуть" сервак базы
Именно поэтому я его и привел
На небольших объемах разницы не видно, а на больших могут начаться тормоза.
В любом случае пусть XXXXXXX попробует и расскажет нам какой вариант у него быстрее работает.
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
20.03.2012, 13:59  [ТС]
Цитата Сообщение от crumb
to XXXXXXX: Проставь индексы на "id", "id_code" и пользуйся лимитом, при твоих объемах может виснет не мускул а броузер например.
Индексы стоят!!!
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
20.03.2012, 14:02  [ТС]
Когда будет работать я напишу ка и что! Всем спасибо!
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
20.03.2012, 20:05  [ТС]
SELECT id, count(id_code) AS count_id FROM tableName GROUP BY id HAVING count_id = 3 (6.1479 сек) ето не подходящий результат
Что еще можно сделать?
Я уже все по SQL перерыл!
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
21.03.2012, 10:15
А вариант с JOIN сколько работает?
0
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 242
21.03.2012, 11:04  [ТС]
Цитата Сообщение от bazile
А вариант с JOIN сколько работает?
Виснет капитально!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2012, 11:04
Помогаю со студенческими работами здесь

Помогите составить SQL запрос
Пр: Есть две таблицы Имя, Фамилия. В Имя(id,name) Фамилия(id,famili,schet). schet - Это сколько однофомильцев. Как сделать выборку,...

Помогите составить sql запрос
вообщем есть такая таблица: field_1 field_2 1 a1 1 a2 1 a3 2 b1 2 b2 4 ...

помогите составить SQL-запрос
есть таблица, в которую заносятся все события прохода через пропускной терминал, соответственно для каждого сотрудника для каждого входа и...

помогите составить SQL-запрос, совсем туплю :))
Есть таблица, допустим, состоящая из полей ID int IDENTITY 1,1 и OrderNo int. Допускается существование записей с одинаковым OrderNo. ...

Помогите группе одиноких чайников составить SQL запрос
<code>sdatRec = 'SELECT * FROM BAccount WHERE Account ='' & txtArve(0).Text & ''' ' And Buy_Day = '' & txtArve(1).Text & ''' </code> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru