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

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


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


Страницы:   1 2

Наверх

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