Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL-запрос (выборка из 3-х таблиц) 
:(
    Опции темы
stron
Дата 17.4.2005, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Чего-то никак не могу придумать запрос
3 таблицы:


Table1:
table1_id
table1_data

Table2:
table2_id
table1_id
table3_id

Table3:
table3_id
table3_data


Короче, связываем данные из 2-х таблиц(Table1 и Table3) через третью
Много ко многим.


Вопрос:
как выбрать table1_data у которых есть несколько table3_data
(проще говоря поиск по нескольким значениям)





--------------------
подписи нет
PM ICQ   Вверх
Kurt
Дата 17.4.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Немножко не понял, что ты хочешь.
Вот, например, запрос, к-й вернет список table1_data и соотв. table3_data.

Код
select table1.table1_data, 
table3.table3_data from table1, table2, table3
where table1.table1_id=table2.table1_id and table3.table3_id=table2.table3_id


Ну, а если тебе нужны только table1_data, для которых существуют данные из table3, то так:

Код
select table1.table1_data from table1, table2, table3
where table1.table1_id=table2.table1_id and table3.table3_id=table2.table3_id


А вообще, поясни задачу.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
stron
Дата 17.4.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Пример:

Table1:
1 Вася Пупкин
2 Крендель
3 Хрюндель


Table2:
1 1(Вася Пупкин) 1(Хороший)
2 1(Вася Пупкин) 3(Гнус)
3 2(Крендель) 1(Хороший)
4 2(Крендель) 2(Умный)
5 2(Крендель) 4(Ворчун)
6 3(Хрюндель) 4(Ворчун)
7 3(Хрюндель) 2(Умный)



Table3:
1 Хороший
2 Умный
3 Гнус
4 Ворчун


Так вот, надо выбрать умных ворчунов


--------------------
подписи нет
PM ICQ   Вверх
Kesh
Дата 17.4.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Код
select * from table1 t1, table2 t2, table3 t3
where ( t1.table1_id = t2.table1_id )
and ( t3.table3_id = t2.table3_id )
and ( t3.table3_data in ('Умный', 'Ворчун') )


По-моему что-то вроде этого...
Добавлено @ 15:16
Нет... не так... сейчас еще подумаю...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Kesh
Дата 17.4.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Код

select * from table1 t1
left join table2.table2_id as t21
on (table1.table1_id = table2.table1_id)
and (table3.table3_id = table2.table3_id)
and (table3.table3_data like 'Умный')
left join table2.table2_id as t22 
on (table1.table1_id = table2.table1_id)
and (table3.table3_id = table2.table3_id)
and (table3.table3_data like 'Ворчун')
where not (t21 is null) and not (t22 is null)

Запрос скореее всего неправильный... так как писал из головы и не проверял... но идея такова... Делать Join по параметру... и проверять есть ли он (если его нет - то null)


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
stron
Дата 17.4.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Всё оказалось проще:
Код

select  table1_id, table1_data   from  table1
left join  table2
on ( table1.id = table2.table1_id )

left join  table3  as  table30
on ( table30.id = table2.table3_id )  and  ( table30.table3_data = 'Умный' )

left join  table3  as  table31
on ( table31.id = table2.table3_id )  and  ( table31.table3_data = 'Ворчун' )

where ( table31.table3_data  is not NULL )

Всем спасибо!!


--------------------
подписи нет
PM ICQ   Вверх
Kesh
Дата 17.4.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



stron ИМХО надо еще
Код

table30.table3_data 
проверять


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
stron
Дата 17.4.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



нет, там всё хорошо
дополнительная проверка круто искаверкает рез-ты


Это сообщение отредактировал(а) stron - 17.4.2005, 21:08


--------------------
подписи нет
PM ICQ   Вверх
Kesh
Дата 17.4.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



stron Ах, ну да точно... smile Согласен...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

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

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

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

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


 




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


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

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