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

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

Выборка с учётом не существования записей [D7, IB6.x]


Страницы:   1 2

yk ©   (2005-05-20 09:45:00) 

Уважаемые Мастера!
Помогите пожалуйста с составлением запроса.

Есть:

Табл1(
ИДтабл1
название
.....
)

Табл2(
ИДтабл1,
ИДтабл2, FK на табл1
количество
....
)

Мне нужно составить выборку из Таблицы1(ИДтабл1, название) и
Таблицы2(ИДтабл2, количество)
ПРИЧЕМ!
Если в табл1 есть запись с табл1.ИДтабл2=Табл2.ИДтабл2
то количество берется из Табл1
Если такой записи нет, то количество берётся равным 0

Наверное кто-нибудь сталкивался с подобной ситуацией, подскажите, что делать в таких случаях. Плиз !


ЮЮ   (2005-05-23 08:59:00) [21]

>К сожалению на этот запрос не получается повесить явный join
В нем используются sum, результаты работы процедур, условие exists

Какая разница, что в нем используется?
Что мешает привести твой
FROM
 TableName, ProcedureName, ...
WHERE
 TableName.Ref1_1 = ProcedureName.Ref1_2
к виду

FROM
 TableName
 JOIN ProcedureName ON TableName.Ref1_1 = ProcedureName.Ref1_2
 ...
куда и добавить
 LEFT JOIN ViewName ON xxx.RefN_1 = ViewName.RefN_2


yk   (2005-05-23 08:28:00) [22]

К сожалению на этот запрос не получается повесить явный join
В нем используются sum, результаты работы процедур, условие exists
:(

хотя может я чего-то не то делаю 8)

А какие могут быть ограничения на использование join?


ЮЮ   (2005-05-23 08:18:00) [23]

>Вопрос как можно сочетать результат сложного запроса с join ?
(получиться ведь смешивания явных и неявных join ...)

Привыкать к явному использованию JOIN, IMHO. Когда разгрузишь WHERE от условий связи, тогда и запрос не будет выглядеть таким уж сложным, а условия не будут казаться нехорошими :)


yk   (2005-05-23 08:07:00) [24]

8)

Эти количества я загнала в вьюшку пока.

Теперь такая проблема:
У меня сложный запрос на выборку товаров (со всякими разными нехорошими условиями).

Я хочу его left join с вьюшкой количеств.
Тогда получиться то что надо.

Вопрос как можно сочетать результат сложного запроса с join ?
(получиться ведь смешивания явных и неявных join ...)


P.N.P.   (2005-05-22 16:07:00) [25]

>YK ©   (22.05.05 15:01) [15]
Ну так обнови до 7.5, что ли :)


YK   (2005-05-22 15:01:00) [26]

У меня 7.1
И нету их :((


P.N.P.   (2005-05-20 11:50:00) [27]

В IB7.5 CASE и COALESCE есть.


yk   (2005-05-20 11:41:00) [28]


> Я чего-то пропустил ?

Ой! Это я попутала, конечно "количество" из Табл2  :)


> lexer ©   (20.05.05 11:36) [12]


Сейчас попробую, но меня терзают смутные сомненья....


lexer   (2005-05-20 11:36:00) [29]

Можно и без процедуры и без COALESCE и CASE
SELECT
T1.id_tabl1,
T1.название,
CAST(T2.количество AS NUMERIC) количество
FROM Табл1 T1
LEFT JOIN Табл2 T2
ON T2.id_table2 = T1.id_table1
WHERE T2.количество IS NOT NULL
UNION
SELECT
T1.id_tabl1,
T1.название,
CAST(0 AS NUMERIC) количество
FROM Табл1 T1
LEFT JOIN Табл2 T2
ON T2.id_table2 = T1.id_table1
WHERE T2.количество IS NULL


Johnmen   (2005-05-20 11:27:00) [30]

>"количество" - название поля
и
>то количество берется из Табл1

Я чего-то пропустил ?
:)


yk   (2005-05-20 11:24:00) [31]


> P.N.P. ©   (20.05.05 11:20) [9]
> Можно еще и процедурку организовать.

Которая проверяет, есть ли запись и выдает значение поля или 0 ?

Но тогда проще мне в программе организовывать выборки для каждого выбранного поля Табл1 для поиска его количества.

По-моему не намного хуже будет.


P.N.P.   (2005-05-20 11:20:00) [32]

>yk ©   (20.05.05 11:17) [8]
Можно еще и процедурку организовать.


yk   (2005-05-20 11:17:00) [33]

:( нету :(


lexer   (2005-05-20 11:13:00) [34]

тогда используй CASE, кажись в 7 есть, точно не знаю...


yk   (2005-05-20 11:12:00) [35]

:( нет только что попробовала
У меня не 6, а 7


lexer   (2005-05-20 11:09:00) [36]

как, разве в 6 нет? это на жарптице 1.5 означает: если NULL то какое-то значение, в данном примере - 0


yk   (2005-05-20 11:04:00) [37]


> Lexer ©   (20.05.05 10:13) [2]

Что такое COALESCE

Такого в IB нет :(


yk   (2005-05-20 11:00:00) [38]


> Количество чего ?

"количество" - название поля


Lexer   (2005-05-20 10:13:00) [39]

yk ©   (20.05.05 09:45)
Так и не понял что тебе надо, может это?
SELECT
T1.id_tabl1,
T1.название,
COALESCE(T2.количество,0)
FROM Табл1 T1
LEFT JOIN Табл2 T2
ON T2.id_table2 = T1.id_table1


Johnmen   (2005-05-20 10:06:00) [40]

>то количество берется из Табл1

Количество чего ?


Страницы:   1 2

Наверх

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