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

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

select from select как сделать правильно? [D7, MSSQL]


Vlad Oshin ©   (2006-12-15 13:48:00) 

хочу сделать примерно следующее:
select * from tbl_turist where TU_DGcod=

select  * from
  tbl_dogovor
where
 DG_CnKey = (select CN_key from tbl_Country where CN_NameLat='HURGHADA')
and DG_CtKey = (select Ct_key from CityDictionary where CT_Name=' HURGHADA')
and DG_TRKEY = (select TL_key from tbl_TurList where TL_Name='HUR_100_ 23.12')
and DG_TurDate = '23-12-2006' //тут получаю таблицу из двух путевок, по которым едут по 2 человека. Собственно этих четырех человек и надо получить
 
почему то не нравится TU_DGcod=


MsGuns   (2006-12-16 02:05:00) [1]

Дорогой Влад, потратьте пару-тройку дней на SQL,- ей богу, окупится многократно


Vlad Oshin   (2006-12-15 18:34:00) [2]

следующее дает такое повторение
турист1-путевка1
турист2-путевка1
турист3-путевка2
турист4-путевка2
турист1-путевка1
турист2-путевка1
турист3-путевка2
турист4-путевка2

select * from tbl_turist,  tbl_dogovor
where TU_DGcod in (
select
DG_code
from
tbl_dogovor
where
 DG_CnKey = (select CN_key from tbl_Country where CN_NameLat='HURGHADA')
and DG_CtKey = (select Ct_key from CityDictionary where CT_Name=' HURGHADA')
and DG_TRKEY = (select TL_key from tbl_TurList where TL_Name='HUR_100_ 23.12')
and DG_TurDate = '23-12-2006')

and

 DG_CnKey = (select CN_key from tbl_Country where CN_NameLat='HURGHADA')
and DG_CtKey = (select Ct_key from CityDictionary where CT_Name=' HURGHADA')
and DG_TRKEY = (select TL_key from tbl_TurList where TL_Name='HUR_100_ 23.12')
and DG_TurDate = '23-12-2006'


Vlad Oshin   (2006-12-15 18:17:00) [3]

подскажите еще такой момент

select  * from
 tbl_dogovor
where
DG_CnKey = (select CN_key from tbl_Country where CN_NameLat='HURGHADA')
and DG_CtKey = (select Ct_key from CityDictionary where CT_Name=' HURGHADA')
and DG_TRKEY = (select TL_key from tbl_TurList where TL_Name='HUR_100_ 23.12')
and DG_TurDate = '23-12-2006'

получено 2 путевки

select * from tbl_turist
where TU_DGcod in (
select
DG_code
from
tbl_dogovor
where
DG_CnKey = (select CN_key from tbl_Country where CN_NameLat='HURGHADA')
and DG_CtKey = (select Ct_key from CityDictionary where CT_Name=' HURGHADA')
and DG_TRKEY = (select TL_key from tbl_TurList where TL_Name='HUR_100_ 23.12')
and DG_TurDate = '23-12-2006')

получено 4 туриста по этим путевкам(мне так понятнее)

а как вывести
турист1-путевка1
турист2-путевка1
турист3-путевка2
турист4-путевка2
?


MsGuns   (2006-12-15 15:20:00) [4]

>stone ©   (15.12.06 14:59) [8]
>может лучше так?

Я бы сказал "приятнее" для сервера, т.к. не заставляет его заниматься выборками ДО каких-бы то ни было сравнений (вложенные селекты) ;)


stone   (2006-12-15 14:59:00) [5]

вернее так
select tt.* from tbl_turist tt
 inner join tbl_dogovor d on tt.TU_DGcod = d.DG_code
 inner join Country c on d.DG_CnKey = c.CN_key
 inner join CityDictionary cd on d.DG_CtKey  = cd.Ct_key
 inner join tbl_TurList t on c.DG_TRKEY = t.TL_key
where
c.CN_NameLat='HURGHADA'
and
cd.CT_Name=' HURGHADA'
and
t.TL_Name='HUR_100_ 23.12'
and
d.DG_TurDate = '23-12-2006'


Desdechado   (2006-12-15 14:59:00) [6]

Vlad Oshin ©   (15.12.06 13:59) [3]
> IN
Это для случаев, когда возвращается отличное от единицы количество записей (ноль или больше единицы)


stone   (2006-12-15 14:52:00) [7]

может лучше так?

select  d.* from tbl_dogovor d
  inner join Country c on d.DG_CnKey = c.CN_key
  inner join CityDictionary cd on d.DG_CtKey  = cd.Ct_key
  inner join tbl_TurList t on c.DG_TRKEY = t.TL_key
where
c.CN_NameLat='HURGHADA'
and
cd.CT_Name=' HURGHADA'
and
 t.TL_Name='HUR_100_ 23.12'
and
d.DG_TurDate = '23-12-2006'


Vlad Oshin   (2006-12-15 14:17:00) [8]

дошло


clickmaker   (2006-12-15 14:14:00) [9]


> [4] Vlad Oshin ©   (15.12.06 14:04)

вот это странно

select * from tbl_turist where TU_DGcod=

select  * from
 tbl_dogovor

TU_DGcod сравниваешь с *


Vlad Oshin   (2006-12-15 14:04:00) [10]


> Desdechado ©   (15.12.06 13:58) [2]

что странного?
select * from tbl_A where row_1='asdqeqw' - можно.
будет таблица tbl_A1, подтаблица таблицы tbl_A
Теперь делаем из нее select но по другому значению
select * from tbl_A1 where row_2='asdqeqw'
Разве нет?


Vlad Oshin   (2006-12-15 13:59:00) [11]


> clickmaker ©   (15.12.06 13:52) [1]

не... не получается или я не понял :)

IN !
select * from tbl_turist
where TU_DGcod in (
select
DG_code
from
tbl_dogovor
where
 DG_CnKey = (select CN_key from tbl_Country where CN_NameLat='HURGHADA')
and DG_CtKey = (select Ct_key from CityDictionary where CT_Name=' HURGHADA')
and DG_TRKEY = (select TL_key from tbl_TurList where TL_Name='HUR_100_ 23.12')
and DG_TurDate = '23-12-2006')

вот что значит покурить :)


Desdechado   (2006-12-15 13:58:00) [12]

как ты интересно сравниваешь все поля (*) с одним полем?
что должно получиться?


clickmaker   (2006-12-15 13:52:00) [13]

where TU_DGcod=(select TU_DGcodfrom ... )


Наверх

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