Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Упростить запрос   Найти похожие ветки 

 
parovoZZ ©   (2006-09-04 13:41) [0]

Есть запрос

"SELECT Equipment_name as name FROM Equipments WHERE " +
   "((SELECT System_ID FROM Systems WHERE System_name=:prmSys)=System) and " +
    "((SELECT Object_ID FROM Objects WHERE Object_name=:prmObj)=Object_) GROUP BY Equipment_name"

Есть три таблицы
Systems с полями System_ID и System_name
Objects с полями Object_ID и Object_name

Equipments с полями Equipment_name, System (связан с Systems.System_ID) и Object_ (связан с Objects.Object_ID)

Пользователь вводит названия prmObj и prmSys.

Можно ли его упростить?


 
Desdechado ©   (2006-09-04 13:46) [1]

что нужно получить в результате запроса?


 
Sergey13 ©   (2006-09-04 13:48) [2]

> [0] parovoZZ ©   (04.09.06 13:41)

GROUP BY - тут нафиг не нужен, а в остальном - что не устраивает?


 
ANB ©   (2006-09-04 14:06) [3]


> Equipments с полями Equipment_name, System (связан с Systems.
> System_ID) и Object_ (связан с Objects.Object_ID)

Связки с Systems и Object_ многие к одному ? Тогда лучше заменить на джойны.


 
MaxDAG ©   (2006-09-04 15:22) [4]

Можно:
Вариант без связывания
 select a.Equipment_name as name
 from   Equipments a, Systems b, Objects c
 where (b. System_name=:prmSys) and
          (b.System_ID=a.System) and
          (c. Object_name=:prmObj) and
          (c. Object_ID=a. Object_)


 
parovoZZ ©   (2006-09-04 15:42) [5]


> что нужно получить в результате запроса?

Есть список систем, есть список объектов. Также есть список оборудования, которое установлено на определённом объекте и относится к определённому классу систем. Например, есть записи
Радиовещание -> Квартира 10 -> радио
Радиовещание -> Квартира 10 -> 3-х радио
Телевещание -> Квартира 20 -> телевизор

Если пользователь вводит Радиовещание и Квартира 10, то ему будет предложено занести информацию о радио или о 3-х радио.
Если пользователь вводит Радиовещание и Квартира 20, то ему будет сообщено, что оборудования данной системы нет по такому адресу. Примерно так.


> > [0] parovoZZ ©   (04.09.06 13:41)GROUP BY - тут нафиг
> не нужен, а в остальном - что не устраивает?

Запрос выдаст
радио
радио
радио
радио
3-х радио
3-х радио
3-х радио
3-х радио

Без него никак.


> Связки с Systems и Object_ многие к одному ? Тогда лучше
> заменить на джойны.


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


 
Desdechado ©   (2006-09-04 15:56) [6]

Пояснения, что и где - это хорошо.
Но пока сам для себя или для нас не сформулируешь, что нужно получить в результате, вряд ли будет запрос.


 
Sergey13 ©   (2006-09-04 15:59) [7]

2 [5] parovoZZ ©   (04.09.06 15:42)

> [4] MaxDAG ©   (04.09.06 15:22)

Не подойдет?


 
Aristarh Dark   (2006-09-04 20:26) [8]

Не знаю какой движок используется, но для MS SQL написал бы так.
имеем:
"SELECT Equipment_name as name FROM Equipments WHERE " +
"((SELECT System_ID FROM Systems WHERE System_name=:prmSys)=System) and " +
"((SELECT Object_ID FROM Objects WHERE Object_name=:prmObj)=Object_) GROUP BY Equipment_name"

и Есть три таблицы
Systems с полями System_ID и System_name
Objects с полями Object_ID и Object_name
Equipments с полями Equipment_name, System (связан с Systems.System_ID) и Object_ (связан с Objects.Object_ID)
Пользователь вводит названия prmObj и prmSys

Соответственно:
SELECT Equipment_name as [Name]
FROM (Equipments Eq LEFT JOIN System Sys ON Eq.System_ID = Sys.System_ID) LEFT JOIN Object_ Obj ON Eq.Object_ID = Obj.Object_ID
WHERE
Obj.ObjectName = :prmObj
AND
Sys.System_Name = :prmSys
GO

думается что что-то вроде этого, со скобками не уверен :) Ну а с группировкой - это надо по набору данных смотреть
Но писать так:
((SELECT System_ID FROM Systems WHERE System_name=:prmSys ИМХО совсем неверно т.к. SELECT возвращает набор данных и сравнивать его с параметром негоже


 
parovoZZ ©   (2006-09-05 14:49) [9]

Ну да. Запрос-то не работает ни фига.
Остаётся два варианта
либо юзать [8]
либо делать выборку ID.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.053 c
15-1159951163
BadTester
2006-10-04 12:39
2006.10.29
Оцените, вот наднях написал программу Smart FM !!!


2-1160502347
EG
2006-10-10 21:45
2006.10.29
Вопрос по ООП


15-1160203276
Gydvin
2006-10-07 10:41
2006.10.29
Хочу звуки органа


3-1156852783
Alex_AA
2006-08-29 15:59
2006.10.29
Сортировка записей в таблице БД


6-1149207572
Валерий
2006-06-02 04:19
2006.10.29
Ошибка до перехвата исключения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский