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

时间:2014-05-08 15:50:10

标签: sql tsql sql-server-2012

我对另一个“在一张桌子而不是另一张”线程中略有不同,我见过。

我有3张桌子:

ProductFeed
    ProductFeedID INT
    ProductName NVARCHAR(30)

Product
    ProductID INT
    ProductFeedID INT
    StorefrontID INT

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

我希望做的是显示所有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.有人可以帮忙吗?

2 个答案:

答案 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)