Запрос минус проблемы? - PullRequest
       1

Запрос минус проблемы?

1 голос
/ 24 января 2012

Мой запрос не возвращает ожидаемое количество записей первая часть возвращает 50.000 записей вторая часть (ниже минуса) возвращает 30.000 так что в заключение мой минус должен вернуть 20.000 записей. только этого не происходит больше записей удаляются 21.000.

- редактировать - Счетчик возвращает больше ожидаемых строк, эти возвращенные записи будут удалены на более позднем этапе.

Есть предложения?

-- select count(*) from (
 SELECT        
    loc.ITEM, 
            loc.loc
            FROM ITEM_LOC loc
    WHERE LOC NOT IN(101,104,107,115,116,117)
    and loc.status = 'A' 
    and primary_supp in (select supplier from item_supplier where supp_discontinue_date >= sysdate) 
   --        );
minus
 --; select count(*) from (
 select distinct item, store from (
  SELECT        
            siv.ITEM,
            sto.store 
            FROM DC_CCN190_SID_VTB siv
            JOIN DC_STORE_RANGING str ON siv.dpac = str.dpac
    join store sto on sto.store_name_secondary = cast(str.loc as varchar2(150 byte))
    where sto.store_close_date >= sysdate 
        union
            SELECT 
    pim.ITEM,
            sto.store
            FROM dc_pim_export_vert PIM
            JOIN DC_STORE_RANGING str ON PIM.dpac = str.dpac
    join store sto on sto.store_name_secondary = cast(str.loc as varchar2(150 byte))
    where PIM.artikel_type_lms = 'D1'
    and sto.store_close_date >= sysdate 
    )

----------------------------------------------- --------------------------------------

count возвращает 50.000

  select count(*) from (
 SELECT        
    loc.ITEM, 
            loc.loc
            FROM ITEM_LOC loc
    WHERE LOC NOT IN(101,104,107,115,116,117)
    and loc.status = 'A' 
    and primary_supp in (select supplier from item_supplier where supp_discontinue_date >= sysdate));

количество возвращается 30.000

select count(*) from (
 select distinct item, store from (
  SELECT        
            siv.ITEM,
            sto.store 
            FROM DC_CCN190_SID_VTB siv
            JOIN DC_STORE_RANGING str ON siv.dpac = str.dpac
    join store sto on sto.store_name_secondary = cast(str.loc as varchar2(150 byte))
    where sto.store_close_date >= sysdate 
        union
            SELECT 
    pim.ITEM,
            sto.store
            FROM dc_pim_export_vert PIM
            JOIN DC_STORE_RANGING str ON PIM.dpac = str.dpac
    join store sto on sto.store_name_secondary = cast(str.loc as varchar2(150 byte))
    where PIM.artikel_type_lms = 'D1'
    and sto.store_close_date >= sysdate 
    );

Значит минус должен вернуть 20.000 верно?

Ответы [ 2 ]

5 голосов
/ 24 января 2012

A = 50000. B = 30000. A - B = 21000. Что такое B - A?Я ожидаю 1000. То есть, есть 1000 записей в B, которые не включены в A. В простом случае

A возвращает 4 записи Джим Боб Мэри Саманта

B возвращает 3Боб Мэри Жозефина

A - B возвращает 2 записи: Джим Саманта

B - A возвращает 1 запись: Жозефина

0 голосов
/ 24 января 2012

Используйте

select count(*)

в обоих запросах и сравните результат с

select distinct count(*)

Должна быть разница!


С ЗДЕСЬ , "Кроме того, если в таблице_А есть две одинаковые строки, и эта таблица существует в таблице_В, ОБА строки из таблицы_А будут удалены из набора результатов."



Если нет разницы, то только одно объяснение:

MINUS - это операция набора SQL, которая выбирает элементы из первой таблицы, а затем удаляет строки, которые также возвращаются вторым SELECTоператор.

Не все строки со второй секунды присутствуют в первой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...