![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно сортировать?
Экспериментатор © (2004-07-27 15:29:00)Объясните пожалуйста недалекому: почему не сортируется по SIZENAME
Запрос следующий:
SELECT
GOODS.ID,
GOODS.NAME,
(SELECT SIZES.NAME FROM SIZES WHERE SIZES.ID=GOODS.ID_SIZES) SIZESNAME,
FROM
GOODS
ORDER BY
SIZESNAME
Экспериментатор (2004-07-28 06:58:00) [1]
> См.в [1], [9] как связывают таблицы
> Если же GOODS.ID_SIZ может быть NULL, то
Может
to All
Спасибо всем
ЮЮ (2004-07-28 02:39:00) [2]>Хотелось бы узнать так вообще нельзя писать?
ИМХО, нельзя писать
,(SELECT SIZES.NAME FROM SIZES WHERE SIZES.ID=GOODS.ID_SIZES) SIZESNAME
для организации тривиальной связи двух таблиц, т.к. этот подзапрос будет выполняться для каждой записи из главной таблицы.
См.в [1], [9] как связывают таблицы
Если же GOODS.ID_SIZ может быть NULL, то
SELECT
GOODS.ID,
GOODS.NAME,
SIZES.NAME SIZESNAME
FROM
GOODS
LEFT JOIN SIZES ON SIZES.ID=GOODS.ID_SIZES
ORDER BY SIZES.NAME
Johnmen (2004-07-27 16:25:00) [3]В ORDER BY недопустимо указывать алиасы полей запроса.
Либо реальные поля таблиц, либо номер поля запроса.
Ega23 (2004-07-27 15:55:00) [4]Попробуй
ORDER BY SIZES.NAME
Экспериментатор (2004-07-27 15:54:00) [5]Извините, был не корректен
все работает если писать
Order By 3
но если написать
ORDER BY SIZENAME
то ошибка. Хотелось бы узнать так вообще нельзя писать?
Ega23 (2004-07-27 15:54:00) [6]Этот запрос принципиально отличается от [0]
Да, согласен, на исходный невнимательно посмотрел. Показалось, что вложенный селект какой-то другой.
Ega23 (2004-07-27 15:53:00) [7]SELECT
GOODS.ID,
GOODS.NAME,
SIZES.NAME SIZESNAME,
FROM
GOODS,
SIZES
WHERE SIZES.ID=GOODS.ID_SIZES
ORDER BY SIZESNAME
Sandman25 (2004-07-27 15:49:00) [8][7] Экспериментатор (27.07.04 15:48)
Можно узнать почему?
Он эквивалентен Вашему запросу.
Экспериментатор (2004-07-27 15:48:00) [9]
> Sandman25 © (27.07.04 15:30) [1]
Не подходит
Sandman25 (2004-07-27 15:43:00) [10][5] Ega23 © (27.07.04 15:40)
Этот запрос принципиально отличается от [0]
Ega23 (2004-07-27 15:40:00) [11]MS SQL поддерживает.
select * from
(
select AccObjId=0,ZoneId=Z.UID,PointId=P.UID, LogAddr=EPLogAddr, PhsAddr=EPPhsAddr,
ZoneNam=ltrim(rtrim(cast(P.EPName as varchar(64)) )),
ZoneLab=ltrim(rtrim(cast(P.EPName as varchar(16)) )),
ZoneNot=P.EPComment,ZoneMsk=p.epstatus
from L_ezonestbl Z, L_EPointsTBL P
where P.EPOwnerID=Z.UID
and(@zoneid=-1 or @zoneid=Z.UID)
--@@23.08.2001
and p.epstatus>0 and z.EZStatus>0
UNION all
--зоны
select AccObjId=0,ZoneId=@zoneid,PointId=0, LogAddr=0, PhsAddr=0,
ZoneNam='Все точки',
ZoneLab='Все',
ZoneNot='',ZoneMsk=1
) as U
where(
@AdmGrCod=-1
or
((@AdmGrCod<>-1)
and (U.PointId not in (select pointid from admitGrPl
where AdmGrCod=@AdmGrCod and zoneid=@zoneid
)
or pointid=0
)
)
)
and (@mode <>100
or
(@mode=100 and @zoneId=-1 and pointid=0 and zoneid=@zoneId) -- только точка ВСЕ
or
(@mode=100 and @zoneId<>-1 and @pointid=0 ) -- ВСЕ точки и точка ВСЕ
or
(@mode=100 and @zoneId<>-1 and @pointid<>0 and pointid<>0 )-- ВСЕ точки БЕЗ точки ВСЕ
)
order by ZoneId,PointId
Sandman25 (2004-07-27 15:36:00) [12][2] Ega23 © (27.07.04 15:34)
Не надо так советовать.
Тут недавно был один с
select *
from (select * from a) b
Все жаловался, что IB такие конструкции не поддерживает :)
Экспериментатор (2004-07-27 15:35:00) [13]InterBase
Ega23 (2004-07-27 15:34:00) [14]
select * from
(SELECT
GOODS.ID,
GOODS.NAME,
(SELECT SIZES.NAME FROM SIZES WHERE SIZES.ID=GOODS.ID_SIZES) SIZESNAME,
FROM
GOODS) as A
ORDER BY
SIZESNAME
Так пойдёт?
И вообще, СУБД какая?
Sandman25 (2004-07-27 15:30:00) [15]Попробуйте так
SELECT
GOODS.ID,
GOODS.NAME,
SIZES.NAME SIZESNAME,
FROM
GOODS,
SIZES
WHERE SIZES.ID=GOODS.ID_SIZES
ORDER BY
3