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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос нескольких параметров в нескольких таблицах, С одним Ок, а когда параметров много? 
V
    Опции темы
Juju
Дата 5.8.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не то чтобы вернулся к старым баранам... Но почти похоже на то!
Отображение данных из двух таблиц при нескольких параметров запроса...
Приведу свой любимый пример про предприятия, директоров и учредителей:
Т.е. есть две таблички... Одна - фирмы (FIRM), вторая - учредители (UCHREDITEL)
Таблица 1: FIRM
поля и значения
ID     KOD             NAZVANIE               DIREKTOR
1      100265        ЕВРОСПОРТ            ИВАНОВ А.А. 
2      230173        КИПР-ТУР                СИДОРОВ Б.Б. 
3      156567        МОЛОКОЗАВОД       ПЕТРОВ П.П. 
4      345678        КАВКАЗ МЕТАЛЛ      КАРПОВА В.А. 

Таблица 2: UCHREDITEL
поля и значения
ID     KOD_FIRM   UCHR 
1      100265        ИВАНОВ А.А. 
2      100265        ДРОНОВ К.В. 
3      100265        КИТОВА А.А. 
4      230173        СОМОВ В.А.
5      230173        БАРЫШКИН В.Г.
6      230173        ИВАНОВ В.А.
7      230173        ЧУКАРИН В.Д.
8      156567        КОНДРАТЬЕВ В.В. 
9      156567        ИВАНОВ А.А.
10    156567        КАРПОВА В.А.



ЗАДАЧА:
Отобрать данные в табличке FIRM где директором или учредителем является...
и понеслась список людей...
ИВАНОВ,ПЕТРОВ, СИДОРОВ и т.д. т.е. каждый раз новый список с разным количеством людей...

?:Огромное спасибо comtat-у что надоумил меня с запросом, когда запрашивалась одна фамилия...:
Код

SELECT * FROM (
SELECT kod, nazvanie, director FROM firm WHERE director LIKE 'КОНДРАТЬЕВ%'
UNION
SELECT kod, nazvanie, director FROM firm f
inner join UCHREDITEL u ON u.kod_firm = f.kod
WHERE uchr LIKE 'КОНДРАТЬЕВ%'
) dd

ну или альтернатива:
Код

  SELECT * FROM (
   SELECT KOD,NAZVANIE,DIREKTOR FROM FIRM
   WHERE DIREKTOR LIKE "ИВАНОВ%"
   UNION
   SELECT F.KOD, F.NAZVANIE, F.DIREKTOR FROM FIRM F
    WHERE F.KOD IN(SELECT U.KOD_FIRM FROM UCHREDITEL U WHERE U.UCHR LIKE "ИВАНОВ%")
  )E


А КОГДА НАДО ОДНОВРЕМЕННО ПРОВЕРИТЬ СПИСОК ФАМИЛИЙ??????

PM MAIL   Вверх
Juju
Дата 15.8.2008, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Решение:
Полученный список фамилий для поиска загоняем в таблицу (например LIST) с одним полем (например NAME)
NAME
ПЕТРОВ
ИВАНОВ
СИДОРОВ
а потом вытягиваем из двух таблиц FIRM и UCHREDITEL данные по этим фамилиям, где каждая фамилия (NAME) в таблице LIST может быть директором FIRM или учредителем UCHREDITEL - следующим образом:

Код

SELECT * FROM FIRM F
WHERE EXISTS (SELECT NAME FROM LIST L WHERE F.DIREKTOR LIKE L.NAME+'%')
OR
EXISTS (SELECT * FROM UCHREDITEL U WHERE F.KOD = U.KOD_FIRM AND 
 EXISTS (SELECT NAME FROM LIST L WHERE U.UCHR LIKE L.NAME+'%'))

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

Akina

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

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

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

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

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


 




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


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

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