【问题标题】:SQL table JOIN on difference of two tablesSQL表JOIN关于两个表的差异
【发布时间】:2014-09-08 04:21:22
【问题描述】:

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

-------------------------------------------------- ----------------
佣金:       |卖家 ID(PK1) |产品 ID(PK2)(FK) |佣金 |
-------------------------------------------------- ----------------
                             | 11          | 1                   | 10        |
-------------------------------------------------- ----------------
                              | 11          | 2                   | 20        |
-------------------------------------------------- ----------------
                             | 22          | 3                   | 30        |
-------------------------------------------------- ----------------
                             | 33           | 1                   | 10        |
-------------------------------------------------- ----------------
| 33           | 2                   | 20        |
-------------------------------------------------- ----------------
| 33           | 3                   | 30        |
-------------------------------------------------- ----------------

当我有一个 SellerId 时,我需要查询卖家 没有的所有 ProductIdProductName销售
例如如果 给定 SellerId = 11 结果我应该取回一条记录 (3,Provident Funds)
       if 给定SellerId = 22 结果我应该得到两条记录 (1,Pension Funds)(2,Study Funds)
如果 给定SellerId = 33 没有记录应该被退回。

现在我有这个:

SELECT ProductId FROM Products
EXCEPT
SELECT ProductId FROM Comissions WHERE SellerId = @SellerId

此查询返回 ProductId 的差异,我需要帮助将其与 ProductId 上的 Products 表连接。

提前致谢

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 如果我们没有任何特定的卖家 ID 并且想要获取该类型的所有列表,那么??
    • 什么意思?如果您想要所有产品,那么您根本不需要 WHERE 条件
    • ohhho 11 3 公积金 22 1 养老基金 22 2 学习基金 我想要这种数据
    • @NavneetVerma OP 没有要求这样的查询...?
    • 我只求知识
    【解决方案2】:

    除了dotnetom给出的答案,这是通过使用Exists

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

    SQL Fiddle

    【讨论】:

    • NOT EXISTS 和 NOT IN 有什么区别??
    • @DimaRudaev:如果子查询没有返回任何行,则满足 NOT EXISTS 中的 WHERE 子句。要详细了解它,我建议您通过this link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2011-01-05
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多