SQL表JOIN对两个表的区别

时间:2014-09-08 04:21:23

标签: sql sql-server

我有两个表,我需要在两个表上查询一个字段的差异,然后将结果与其中一个表连接起来,这些是我的表:
       -----------------------------------------------
产品: | ProductId(PK)|产品名称|
      -----------------------------------------------
       | 1 |养老基金|
     -----------------------------------------------
        | 2 |学习基金|                
---------------------------------------------- -
            | 3 |公积金|
                  -----------------------------------------------

         -------------------------------------------------- ----------------
委员会: | SellerId(PK1)| ProductId(PK2)(FK)|委员会|
                 -------------------------------------------------- ----------------                   
| 11 | 1 | 10 |
          -------------------------------------------------- ----------------                 
| 11 | 2 | 20 |
             -------------------------------------------------- ----------------                
| 22 | 3 | 30 |
            -------------------------------------------------- ----------------               
| 33 | 1 | 10 |
            -------------------------------------------------- ----------------
                  | 33 | 2 | 20 |
              -------------------------------------------------- ----------------
            | 33 | 3 | 30 |
              -------------------------------------------------- ----------------

当我有 SellerId 时,我需要查询所有 ProductId ProductName ,卖家不要销售
e.g。如果给出 SellerId = 11 ,我应该返回一条记录(3,公积金)
如果鉴于 SellerId = 22 ,我应该得到两条记录(1,养老基金)(2,学习基金)
如果给定 SellerId = 33,则不返回任何记录

现在我有这个:

从产品中选择ProductId
除了选择ProductId FROM Comissions WHERE SellerId = @SellerId

此查询返回 ProductId 的差异,我需要帮助将其与 ProductId 上的产品表联系起来。< / p>

提前致谢

2 个答案:

答案 0 :(得分:3)

试试这个:

SELECT * FROM Products
    WHERE ProductId NOT IN (SELECT ProductId FROM Comissions WHERE SellerId = @SellerId)

答案 1 :(得分:1)

除了dotnetom给出的答案之外,这是使用Exists

SELECT *
FROM Products
WHERE NOT EXISTS (
        SELECT ProductId
        FROM Comissions
        WHERE SellerId = @SellerId
            AND ProductId = Products.ProductId
        )

SQL Fiddle