Главная страница
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.046 c
15-1160120762
litt
2006-10-06 11:46
2006.10.29
AutoCAD и Delphi


1-1158569305
trubin
2006-09-18 12:48
2006.10.29
listView - проблемка


2-1160653527
VALUA
2006-10-12 15:45
2006.10.29
StringGrid - хранение информации


15-1160051232
Kolan
2006-10-05 16:27
2006.10.29
Дизайн - хорошая штука, но как его реализовать.


15-1160483356
KitsumVI
2006-10-10 16:29
2006.10.29
Исходники к книге Delphi и технология COM