sql - 如何在左连接上设置条件
问题描述
我有两个表,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
我在这里做错了什么?
解决方案
您可以获得预期的输出,如下所示:
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
推荐阅读
- angular - 不理解我的角度代码中的一行(我目前正在通过视频课程学习)
- java - IS Elasticsearch Hadoop 7.10.0 与 Spark 3.0.1 兼容
- node.js - 如何将文件从 multer 上传到另一个 API
- python - NXP NFC 阅读器 PNEV512R 不适用于 Raspberry Pi 4
- php - 为什么我的正则表达式在 PHP 中不起作用?
- ios - 在启动时将内容附加到 Array
- javascript - MongoDB TTL 索引不会删除过期记录
- javascript - 带有javascript的本地文件名?
- r - 如何使用 R 包“gtsummary”在汇总表中生成效果大小 [90%CI]?表中新增ES包计算和定性指标
- php - 为什么我发送的邮件会在这个表单中命名?