我的问题如下:
假设您有三个不同的表(产品、账单和退货)。
如何编写一条单个查询语句以获得以下输出结果:
我尝试使用各种连接方式,但是我还是无法理解。我做错了什么? 目前我找到的最接近的解决方案是这样的:
| ProductId | Name |
=====================
| 1 | Car |
| BillId | ProductId | Amount |
=================================
| 1 | 1 | 100$ |
| 2 | 1 | 200$ |
| ReturnId | ProductId | Amount |
===================================
| 1 | 1 | 50$ |
如何编写一条单个查询语句以获得以下输出结果:
| Product-ID | Name | Type | Amount |
=====================================
| 1 | Car | Bill | 100$ |
| 1 | Car | Bill | 200$ |
| 1 | Car | Ret | 50$ |
我尝试使用各种连接方式,但是我还是无法理解。我做错了什么? 目前我找到的最接近的解决方案是这样的:
SELECT p.*,
(CASE
WHEN b.Amount IS NOT NULL THEN 'Bill'
ELSE 'Ret'
END) AS Type,
COALESCE(b.Amount, r.Amount) AS Amount
FROM Products p
LEFT JOIN Bills b ON b.ProductId = p.ProductId
LEFT JOIN Returns r ON r.ProductId = p.ProductId
对我来说有一件非常重要的事情:真实场景查询要比使用Union时复制/粘贴整个查询逻辑更加庞大。
提示:Union是SQL语句中用于合并两个或多个SELECT语句结果集的关键字。