我必须从三个名为客户、产品和订单的表生成简单的报告。我的报告应该有一栏显示客户是否订购了该产品。如何根据带有产品 ID 的订单中存在的客户 ID 获取 Y 或 N 值?数据示例表如下:
customer
customer_id name address phone
123 govinda nepal 16910833
234 arjun nepal 15546235
product
product_id name brand type price
1 samsung gayalexy s5 samsung smartphone 55000
2 samsung gayalexy s6 samsung smartphone 65000
order
date product_id customer_id
1/1/2016 1 123
5/1/2016 2 123
Run Code Online (Sandbox Code Playgroud)
并希望报告栏如下
cust_id name product_id order_stat
Run Code Online (Sandbox Code Playgroud)
order_stat 应为 Y 或 N。
似乎您需要产品和客户的所有组合(因此CROSS JOIN两个表之间),然后是相关EXISTS子查询。这可以是SELECT列表中的相关子查询:
SELECT
c.customer_id,
p.product_id,
CASE WHEN EXISTS
( SELECT *
FROM "order" o
WHERE o.product_id = p.product_id
AND o.customer_id = c.customer_id
)
THEN 'Y' ELSE 'N'
END AS order_stat
FROM
product p
CROSS JOIN
customer c ;
Run Code Online (Sandbox Code Playgroud)
或 aLEFT JOIN到一个包含一行的虚拟表(dualOracle 中就是这样做的):
SELECT
c.customer_id,
p.product_id,
CASE WHEN d.dummy IS NOT NULL
THEN 'Y' ELSE 'N'
END AS order_stat
FROM
product p
CROSS JOIN
customer c
LEFT JOIN
dual d
ON EXISTS
( SELECT *
FROM "order" o
WHERE o.product_id = p.product_id
AND o.customer_id = c.customer_id
) ;
Run Code Online (Sandbox Code Playgroud)
散记:
order. 因为每次使用它们时您都必须引用它们。| 归档时间: |
|
| 查看次数: |
2151 次 |
| 最近记录: |