Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
2-1160983568
Alex_86
2006-10-16 11:26
2006.10.29
Открыть с помощью


2-1160897410
weeeeee
2006-10-15 11:30
2006.10.29
Нормализовать строку


15-1160216882
AlexanderMS
2006-10-07 14:28
2006.10.29
Как они говорят по-русски?


4-1149350507
chizra
2006-06-03 20:01
2006.10.29
надо перехватить окно в модальном режиме


6-1149414809
Yegorchic
2006-06-04 13:53
2006.10.29
IdFTP.List()