2014-05-08 111 views
0

我對其他「在一個表格中,但不是另一個」的線程略有不同。SQL - 查找不存在鏈接記錄的一個表中的所有記錄

我有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記錄。
  • 店面表每個店面有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.有人可以幫忙嗎?

+0

你會想要使用連接。 [檢查這個參考](http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/)它會幫助你。 – ProfessionalAmateur

回答

0

如果我理解正確,則可以通過生成產品供稿和店面的所有可能組合來產生此問題,然後使用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 
+0

這兩個答案都可以做到。交叉加入是關鍵。謝謝。 – BeachBum

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) 
相關問題