Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

скрипт для дополнительных свойств карточек в документах : Oracle

29.03.2024 18:21


15.01.2007 13:06
omorozov
 
Если в таблице (smcardproperties p) нет значения,
строчка не выводится, хотя делаю a.article=p.article(+),
подскажите, как правильно переделать запрос

SELECT a.specitem as N,
a.article as Артикул,
a.doctype,
p.propval as ISBN,
c.name as Название,
a.quantity as "Кол-во",
a.itempricenotax as "Цена без налога",
a.totalpricenotax as "Сумма без налога",
a.itemprice as "Цена",
a.totalprice as "Сумма"
FROM smspec a, smcard c, smcardproperties p
Where a.docid='ЦЗП000016'
and a.doctype='OR'
and c.article=a.article
and a.article=p.article(+)
and p.propid='OK002'
order by a.specitem
15.01.2007 13:14
OlegON
 
Не видя данных трудно предполагать, вручную разбирать тоже, так что предложу тебе выкинуть все условия, кроме join'а, убедиться, что именно в нем засада. Уверен, что это не так. Где-то лишнее условие. Пока некогда разбираться, но сам джойн правильно описан. Только я бы его на карточки делал, а не спецификацию.
15.01.2007 13:25
reddevil
 
во первых если версия >=9 пиши по ISO
второе - "за простоту" надо платить
Код:
Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0 
Connected as supermag

SQL> select count(*) from smcard;

  COUNT(*)
----------
     97054

SQL> 
SQL> select count(*)
  2   from smcard c,   smcardproperties  p
  3   where c.article=p.article(+)
  4   and   propid='1'
  5  /

  COUNT(*)
----------
     67441

SQL> 
SQL> select count(*)
  2   from smcard c, (select article, propval from smcardproperties where  propid='1' ) p
  3   where c.article=p.article(+)
  4  /

  COUNT(*)
----------
     97054

SQL>
15.01.2007 13:27
omorozov
 
В том то и дело что пробовал, если отбросить условие
and p.propid='OK002'
на конкретное доп.свойство - все строки отбираются.
Ощущение, что надо разбивать с подзапросом,
т.к. на явно прописанный фильтр join не действует
15.01.2007 13:42
omorozov
 
Спасибо, сижу на 8, учусь пока на практических задачах.
15.01.2007 17:04
iwinter
 
при обработке запроса
сначала отбросятся все записи, не удовлетворяющие условию (p.propid='OK002'), соответственно будут отброшены и все пустые записи из p. А потом уже оставшееся и присоединиться к мн-ву a. Поэтому ты пустых записей и не увидишь в итоге.
вроде бы так...
16.01.2007 09:24
slava
 
Цитата:
omorozov Where a.docid='ЦЗП000016'
and a.doctype='OR'
and c.article=a.article
and a.article=p.article(+)
-------------------->
and p.propid(+)='OK002'
--<------------------
order by a.specitem
Попробуй так
16.01.2007 13:58
reddevil
 
Цитата:
slava
Цитата:
omorozov Where a.docid='ЦЗП000016'
and a.doctype='OR'
and c.article=a.article
and a.article=p.article(+)
-------------------->
and p.propid(+)='OK002'
--<------------------
order by a.specitem
Попробуй так
Красиво!
Часовой пояс GMT +3, время: 18:21.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.