繁体   English   中英

SQL –在一个表中查找所有不存在链接记录的记录

[英]SQL – Find all records in one table where linked records don’t exist

我看到的其他“在一个表中但不在另一个表”中的线程略有不同。

我有3张桌子:

ProductFeed
    ProductFeedID INT
    ProductName NVARCHAR(30)

Product
    ProductID INT
    ProductFeedID INT
    StorefrontID INT

Storefront
    StorefrontID INT
    StorefrontName NVARCHAR(30)
  • ProductFeed表的每个记录有一个唯一的产品。
  • 产品表可以有多个相同的ProductFeedID,但每个店面只能有0或1个唯一的ProductFeedID记录。
  • 店面表每个店面有1条记录。

我希望做的是一个查询,显示所有带有StorefrontID和StorefrontName的ProductFeed记录,其中不包含该店面的产品记录。 所以像这样:

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 Server2012。有人可以帮忙吗?

如果我理解正确,那么可以通过生成产品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

-我认为这是可以理解的。

    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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM