![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выборка с учётом не существования записей [D7, IB6.x]
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
Количество чего ?