![]() |
| ||
|
|
Новости |
Поиск |
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
Наверное кто-нибудь сталкивался с подобной ситуацией, подскажите, что делать в таких случаях. Плиз !
yk (2005-05-23 11:27:00) [1]Форумы - замечательная вещь, а то так бы и росла дурочкой :)
yk (2005-05-23 11:11:00) [2]А выяснилось, что тут мне не нужен
> sum(procedureName.counts)
:)
ЮЮ (2005-05-23 10:57:00) [3]>но в моем случае вполне можно обойтись order by
а как же тогда sum(procedureName.counts)
>А хоть тресни, всё равно не хочет делать group by :)
Для начала приведи окончательный запрос, причём реальный :)
yk (2005-05-23 10:56:00) [4]Johnmen , lexer, P.N.P., ЮЮ
Я вас всех ОЧЕНЬ люблю!
Что бы я без Вас делала!
БОЛЬШОЕ, ОГРОМЕДНОЕ ВАМ СПАСИБИЩЕ!
И главное, я кажеться больше стала понимать в sql :)
yk (2005-05-23 10:53:00) [5]
> Естественно, т.е. вместо ViewName.price надо или ставить
>
> MIN(ViewName.price) As Price
> или всключать ViewName.price в поля группировки
А хоть тресни, всё равно не хочет делать group by :)
yk (2005-05-23 10:52:00) [6]
> 2. Нельзя указывать в группировке и сортировке алиасы полей.
ваша правда! Просто у меня алиасы с именами полей совпадали 8)
ЮЮ (2005-05-23 10:48:00) [7]>он теперь относиться ко всему (итоговой выборке)
Естественно, т.е. вместо ViewName.price надо или ставить
MIN(ViewName.price) As Price
или всключать ViewName.price в поля группировки
yk (2005-05-23 10:48:00) [8]
> 2. Нельзя указывать в группировке и сортировке алиасы полей.
Странно, но работает
order by naimenovan
Группировка действительно никакая не проходит,
но в моем случае вполне можно обойтись
order by naimenovan, oboznachen
Johnmen (2005-05-23 10:46:00) [9]
GROUP BY col [, col …] Partitions the results of a query into groups containing all rows with identical values based on a column list
yk (2005-05-23 10:43:00) [10]Или всё-таки из-за group by ?
он теперь относиться ко всему (итоговой выборке)
или только к Table_2
Всё-таки без group by работает ...
Johnmen (2005-05-23 10:38:00) [11]Тогда здесь
Group by NAIMENOVAN, OBOZNACH,TableName.id
order by NAIMENOVAN
1. Такая группировка не пройдёт.
2. Нельзя указывать в группировке и сортировке алиасы полей.
ЮЮ (2005-05-23 10:35:00) [12]Может дело все-таки в названии полей вьюшки?
Попробуй для начала
select
TableName.id as ID ,
TableName.OBOZNACH as OBOZNACH,
TableName.NAIMENOVAN as NAIMENOVAN,
sum(procedureName.counts) as CountS,
ViewName.*
FROM
yk (2005-05-23 10:19:00) [13]ой ! Это очепятка
там counts
select
TableName.id as ID ,
TableName.OBOZNACH as OBOZNACH,
TableName.NAIMENOVAN as NAIMENOVAN,
sum(procedureName. counts) as CountS,
ViewName.price as price,
ViewName.docdate as docdate
FROM
ViewName
rigth join
TableName ON xxx.RefN_1 = ViewName.RefN_2
JOIN ProcedureName ON TableName.Ref1_1 = ProcedureName.Ref1_2
LEFT JOIN Table_2 ON Table_2.id=TableName.Id
WHERE Table_2.id IS NULL
Group by NAIMENOVAN, OBOZNACH,TableName.id
order by NAIMENOVAN
извините за очепятку 8)
По каким причинам обычно выскакивает invalid column reference
Ведь у меня все поля правильно (теперь) написаны ?
Может дело в порядке join-ов ?? 8(
С group by это вроде не связано (убирала group by - всё то же)
Johnmen (2005-05-23 10:10:00) [14]Вот здесь
procedureName.count
Давать какие-либо имена своим объектам, совпадающие с зарезервированными словами, есть большая ошибка...
yk (2005-05-23 10:03:00) [15]Сорри 8)
select
TableName.id as ID ,
TableName.OBOZNACH as OBOZNACH,
TableName.NAIMENOVAN as NAIMENOVAN,
sum(procedureName.count) as CountS,
ViewName.price as price,
ViewName.docdate as docdate
FROM
ViewName
rigth join
TableName ON xxx.RefN_1 = ViewName.RefN_2
JOIN ProcedureName ON TableName.Ref1_1 = ProcedureName.Ref1_2
LEFT JOIN Table_2 ON Table_2.id=TableName.Id
WHERE Table_2.id IS NULL
Group by NAIMENOVAN, OBOZNACH,TableName.id
order by NAIMENOVAN
Вот так...
Johnmen (2005-05-23 09:58:00) [16]>когда перед FROM пишу поля из ViewName
Что-то не видно этого в [24]
yk (2005-05-23 09:55:00) [17]делаю так:
FROM
ViewName rigth join TableName ON xxx.RefN_1 = ViewName.RefN_2
JOIN ProcedureName ON TableName.Ref1_1 = ProcedureName.Ref1_2
LEFT JOIN Table_2 ON Table_2.id=TableName.Id
WHERE Table_2.id IS NULL
Выдаёт ошибку
invalid column reference
когда перед FROM пишу поля из ViewName
Странно....
Если поля не пишу, то выбирает (вроде правильно, но без поле вьюшки непонятно правильно или не совсем )
yk (2005-05-23 09:43:00) [18]Спасибо
> Johnmen ©
теперь надо присобачить
> LEFT JOIN ViewName ON xxx.RefN_1 = ViewName.RefN_2
Johnmen (2005-05-23 09:35:00) [19]
FROM
TableName
JOIN ProcedureName ON TableName.Ref1_1 = ProcedureName.Ref1_2
LEFT JOIN Table_2 ON Table_2.id=TableName.Id
WHERE Table_2.id IS NULL
yk (2005-05-23 09:32:00) [20]мешает exists
FROM
TableName, ProcedureName, ...
WHERE
TableName.Ref1_1 = ProcedureName.Ref1_2
and
not(exists(select * from Table_2 where Table_2.id=TableName.Id))
Как его можно добавить к
> FROM
> TableName
> JOIN ProcedureName ON TableName.Ref1_1 = ProcedureName.Ref1_2