首页 > 解决方案 > 如何在左连接上设置条件

问题描述

我有两个表,CustomerCost如下Products所示:

在此处输入图像描述

我正在使用以下 SQL 查询加入这两个表:

SELECT custCost.ProductId,
       custCost.CustomerCost
FROM CUSTOMERCOST Cost
LEFT JOIN PRODUCTS prod ON Cost.productId =prod.productId
WHERE prod.productId=4
  AND (Cost.Customer_Id =2717
       OR Cost.Customer_Id IS NULL)

join的结果是: joins result

我想要做的是当我通过 customerId 2717 它应该只返回特定的客户成本,即 258.93,当 customerId 不匹配时,它应该只将成本作为 312.50

我在这里做错了什么?

标签: sqlsql-serverjoin

解决方案


您可以获得预期的输出,如下所示:

SELECT Cost.ProductId,
       Cost.CustomerCost
FROM CUSTOMERCOST Cost
INNER JOIN PRODUCTS prod ON Cost.productId = prod.productId
WHERE prod.productId=4
  AND Cost.Customer_Id = 2717

但是,如果您想允许将客户 ID 作为 传递NULL,则必须将最后一行更改为AND Cost.Customer_Id IS NULL。要动态执行此操作,您需要使用变量并根据输入生成查询。

您发布的原始查询中的问题是您使用custCost了查询中不存在的别名。

编辑:实际上,您甚至不需要加入。该CUSTOMERCOST表似乎同时具有客户 ID 和产品 ID。

您可以简单地:

SELECT
    Cost.ProductId, Cost.CustomerCost 
FROM
    CUSTOMERCOST Cost
WHERE
    Cost.Customer_Id = 2717
    AND Cost.productId = 4

推荐阅读