我对另一个“在一张桌子而不是另一张”线程中略有不同,我见过。
我有3张桌子:
ProductFeed ProductFeedID INT ProductName NVARCHAR(30) Product ProductID INT ProductFeedID INT StorefrontID INT Storefront StorefrontID INT StorefrontName NVARCHAR(30)
我希望做的是显示所有ProductFeed记录的查询,其中包含StorefrontID和StorefrontName,它们不包含该店面的产品记录。所以像这样:
ProductFeedID ProductName StorefrontID StorefrontName 123 iPod 1 MyStore1 123 iPod 4 MyStore4 234 TShirt 2 MyStore2 234 TShirt 4 MyStore4 345 Coffee Mug 5 MyStore5 etc.
我正在使用SQL Server 2012.有人可以帮忙吗?
答案 0 :(得分:0)
如果我理解正确,您可以通过生成产品Feed和商店前端的所有可能组合来解决此问题,然后使用left join
。无法匹配的组合是您想要的组合:
select pf.*, sf.*
from productfeed pf cross join
storefront sf left join
product p
on p.ProductFeedID = pf.ProductFeedID and
p.StoreFrontId = pf.StoreFrontId
where p.ProductId is null
答案 1 :(得分:0)
- 我认为这更容易理解。
select pf.*, sf.*
from productfeed pf
cross join storefront sf
where not exists (select 1
from product p
where p.ProductFeedID = pf.ProductFeedID
and p.StoreFrontID = sf.StoreFrontID)