Oracle SQL查询:判断商品是否存在红色选项(返回Y/N)
Oracle SQL查询:判断商品是否存在红色选项
有两张表Items和Options,需要编写Oracle SQL语句提取所有商品,并验证每个商品在Options表中是否存在红色选项,结果以Y(是)或N(否)返回。
表结构
Items表
| id | name |
|---|---|
| 1 | Table |
| 2 | Chair |
| 3 | Box |
| 4 | Fridge |
| 5 | Window |
Options表
| id | item | color |
|---|---|---|
| 1 | Table | Green |
| 2 | Table | Blue |
| 3 | Chair | Black |
| 4 | Chair | Red |
| 5 | Box | Yellow |
| 6 | Fridge | White |
| 7 | Fridge | Purple |
| 8 | Window | Gray |
| 9 | Window | Red |
预期查询结果
| item | is red |
|---|---|
| Table | N |
| Chair | Y |
| Box | N |
| Fridge | N |
| Window | Y |
解决方案
方法1:使用EXISTS子查询
该方法通过子查询判断当前商品是否存在红色选项,逻辑直观,存在性判断效率较高:
SELECT name AS item, CASE WHEN EXISTS ( SELECT 1 FROM Options o WHERE o.item = i.name AND o.color = 'Red' ) THEN 'Y' ELSE 'N' END AS "is red" FROM Items i;
方法2:使用LEFT JOIN + CASE表达式
通过左关联红色选项记录,再通过CASE表达式判断是否存在匹配:
SELECT i.name AS item, CASE WHEN o.item IS NOT NULL THEN 'Y' ELSE 'N' END AS "is red" FROM Items i LEFT JOIN Options o ON i.name = o.item AND o.color = 'Red' GROUP BY i.name;
内容的提问来源于stack exchange,提问作者Inigo CA
相关产品推荐
相关产品推荐

