Форум: "Базы";
Текущий архив: 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.043 c