ahmed_sa Ответов: 2

Способ отображения деталей не существует на торговый код темп и существовать по частям временную таблицу по профессии код ?


I need to select parts that exist on temp table #parts and not exist on  tradecode temp table 

but by trade code not by partid only

suppose i have trade code related to it 2 parts on trade code temp table

then i will display all parts not related to tradecode temp table by trade code

on my case
1- I have trade code 15 on #tempsupplier
2- I will search on temp table TradeCodes for tradecode 15
3-I Found parts related to 15 on Tradecodes temp table 
4-I will get missing parts not related to 15 from  temp table parts
5- SO I WILL SHOW 100,200 


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

create table #tempsupplier
(
SupplierId  int,
TradeCode  int
)
insert into #tempsupplier(SupplierId,TradeCode) 
values 
(10,15)

create table #parts
(
PartID  int,
PartNumber  nvarchar(200),
SupplierId int,
TradeCode int
)

insert into #parts
(PartID,PartNumber,SupplierId) 
values
(100,'silicon',10),
(200,'motherboard',10),
(300,'iron',10),
(400,'plastic',10),



create table #TradeCodes
(
PartID int,
TradeCode int
)
insert into #TradeCodes
(PartID,TradeCode) 
values
(300,15),
(400,15)

FinalResult

partid  companyid  

100       10
200       10

Ankur Ramanuj

Какой вывод вы хотите получить, если tradecode равен null? а что вы хотите, когда tradecode имеет значения?
Можете ли вы легко объяснить, с каким блокиратором вы столкнулись?

ahmed_sa

я объясняю больше и публикую окончательный результат в конце

2 Ответов

Рейтинг:
5

MadMyche

Есть 2 простых способа сделать то, что вы хотите.

Во-первых, это использование Подзапрос; который в вашем случае получает все части из #Tradecode и удаляет их из результатов основного запроса (#Parts)
Подзапросы (SQL Server) - SQL Server | Microsoft Docs[^]

SELECT PartID, SupplierId 
FROM   #Parts 
WHERE  PartID NOT IN (SELECT PartID FROM #TradeCodes)
Другой метод заключается в использовании ВНЕШНЕЕ СОЕДИНЕНИЕ между этими двумя таблицами и выберите отображение только тех записей из #частей, которые не имеют совпадения в #Tradecodes.
Внешние соединения - SQL Server | Microsoft Docs[^]
SELECT p.PartID, p.SupplierId 
FROM   #Parts               p
LEFT OUTER JOIN #TradeCodes t ON p.PartID = t.PartID
WHERE   t.PartID IS NULL

Я бы рекомендовал вам прочитать обе упомянутые статьи, чтобы вы поняли, как работают эти элементы.
Когда у вас есть 2 или более возможных запроса, которые будут делать то же самое, я бы рекомендовал использовать ваши инструменты IDE (например, SSMS), чтобы увидеть, какой запрос более эффективен ("показать фактический план выполнения"); и, очевидно, выбрать более эффективный.
В этом случае они почти равны по производительности.


ahmed_sa

над ним на основе partid мне нужно отобразить на основе tradecode
в моем случае каждый торговый код имеет группу частей
когда торговый код на tempsupplier равен 15
это означает, что я буду отображать все части, которые существуют на temp parts и не существуют на temp trade code
отсутствует то что мне нужно получить отсутствует в торговом коде

MadMyche

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

ahmed_sa

спасибо за помощь

Рейтинг:
2

_Asif_

Это просто запрос, который не требует навыков уровня мастера. Все, что вам нужно знать о различных типах соединений. Мы советуем Вам прочитать хорошие статьи о присоединениях.

Попробовать это


select P.PARTID, P.SUPPLIERID
from #PARTS P
left outer join #TradeCodes T on P.PARTID = T.PARTID
WHERE T.PARTID IS NULL


ahmed_sa

Мне нужны недостающие части на уровне tradecode, а не уровень части, означающий, что части имеют связанные части 1,2,3, тогда я буду искать недостающие части на временной таблице, означающие любую часть, отличную от 1,2,3