Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно сортировать?


Экспериментатор ©   (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


Наверх

Титульная страница Поиск, карта сайта Написать письмо