ahmed_sa Ответов: 2

Сделать запрос деталей не существует на tradecode вернуться таблица результат null, почему ?


проблема

оператор ниже возвращает значения без каких - либо проблем

select top 1000000  p.PartNumber,m.Supplier,m.TradeCodeType,m.status from #PartsMissed m 
inner join parts.Nop_Part p   on p.CompanyID=m.SupplierId 
where
(p.PartID not in (SELECT PartID FROM parts.TradeCodes t where t.CodeTypeID=m.TradeCode))


Я пытаюсь сделать выше выступление левое соединение прямыми, но это не возвращает никаких
ценности
он возвращает null почему
create table #PartsMissed
(
Supplier    nvarchar(200),
SupplierId  int,
TradeCodeType  nvarchar(100),
TradeCode  int,
status      NVARCHAR(100) NULL
)


insert into #PartsMissed
( 
	SupplierId,
	TradeCode
 )  
    VALUES

	(1000234,849774)


Что я уже пробовал:

оператор ниже возвращает нулевой результат почему
хотя первое заявление через ( не ) работает идеально

SELECT  p.PartID, p.CompanyID
FROM   parts.Nop_Part      p 
LEFT OUTER JOIN (
     SELECT mp.PartID, mp.CompanyID,d.TradeCode
     FROM parts.Nop_Part mp  left join #PartsMissed d on mp.CompanyID=d.SupplierId 
     left JOIN parts.TradeCodes AS t  ON t.CodeTypeID = d.TradeCode
) x ON p.PartID=x.PartID
WHERE x.PartID is  NULL

2 Ответов

Рейтинг:
1

Richard Deeming

Упростите свой второй запрос, и проблема должна быть очевидной:

SELECT
    ...
FROM
    parts.Nop_Part As p
    LEFT JOIN
    (
        SELECT mp.PartID
        FROM parts.Nop_Part As mp
    ) As x
    ON x.PartID = p.PartID
WHERE
    x.PartID Is Null
Или, вкладывая, что по-другому:
SELECT
    ...
FROM
    parts.Nop_Part As p
WHERE
    Not Exists
    (
        SELECT 1
        FROM parts.Nop_Part As mp
        WHERE mp.PartID = p.PartID
    )
Сколько частей будет в вашей таблице, которых не существует в вашей таблице? тот же стол? :)


Рейтинг:
0

OriginalGriff

Что ж... он больше ничего не может вернуть ...

SELECT  p.PartID, ...

LEFT OUTER JOIN (
   ...
) x ON p.PartID=x.PartID

WHERE x.PartID is  NULL
С x.PartID должен быть NULL, и x.PartID должно быть равно p.PartID, единственные значения, которые он может вернуть, это NULL.


Richard Deeming

Это не так, как ... LEFT JOIN работает. :)