[ОТВЕТИТЬ]
Опции темы
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, время: 23:21.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.