举个join on case when 的例子
时间: 2023-07-27 07:25:57 浏览: 95
假设我们有两个表A和B,它们的结构如下:
表A:
| id | name |
|----|------|
| 1 | Tom |
| 2 | Jack |
| 3 | Lucy |
表B:
| id | type |
|----|------|
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
现在,我们想要根据表B中的type字段来连接表A,但是type字段的值并不能直接用来连接,我们需要对其进行一些处理。这时,可以使用join on case when语句。具体的SQL语句如下:
```
SELECT A.id, A.name, B.type
FROM A
JOIN B ON CASE WHEN B.type = 1 THEN A.id = B.id ELSE A.id = B.id + 1 END;
```
这条SQL语句的意思是:如果表B中的type字段值为1,则将表A中的id字段与表B中的id字段进行连接;如果表B中的type字段值为2,则将表A中的id字段与表B中的id字段+1进行连接。最终查询结果如下:
| id | name | type |
|----|------|------|
| 1 | Tom | 1 |
| 2 | Jack | 2 |
| 3 | Lucy | 1 |
相关问题
left join case when
left join的用法是什么?
left join是用于将左表中的所有记录和右表中与之匹配的记录返回的操作。在left join中,左表为基础表,会返回左表中的所有记录,而右表只会返回与左表中的记录匹配的数据。如果右表中没有与左表匹配的记录,则返回的结果中相应的字段值为NULL。
举个例子,假设有两张表t_a和t_b,我们可以使用以下语句进行left join操作:
```
select * from t_a a left join t_b b on a.aid = b.bid
```
上述语句将返回包括左表t_a中的所有记录和右表t_b中与之匹配的记录。如果在t_b中没有与t_a匹配的记录,那么对应的字段值将为NULL。
总结来说,left join会返回左表中的所有记录,并且将右表中与之匹配的记录合并在一起。如果没有匹配的记录,则对应的字段值为NULL。通过left join可以更方便地获取左表和右表之间的关联数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [sql 左连接,右连接,等值连接,case-when](https://blog.csdn.net/u013123635/article/details/78326277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
sql on 后面可以用 case when ma
SQL中的`CASE WHEN`语句是一种条件表达式,它用于根据特定条件返回不同的值。当你在`ON`子句后面使用`CASE WHEN`时,通常是在创建一个自连接(self join)、分组查询(GROUP BY)或者作为`HAVING`子句的一部分,目的是对结果集进行条件过滤或者转换。
例如,假设你有一个员工表(Employees),其中包含工资字段(Salary),你可以这样查询:
```sql
SELECT E1.EmployeeID, E1.Name,
CASE WHEN E1.Salary > 5000 THEN 'High Salary'
WHEN E1.Salary BETWEEN 3000 AND 5000 THEN 'Medium Salary'
ELSE 'Low Salary'
END AS SalaryTier
FROM Employees E1
JOIN Employees E2 ON E1.ManagerID = E2.EmployeeID
CASE WHEN E2.Salary > 7000 THEN 'Manager'
ELSE 'Employee'
END AS ManagerRole
```
在这个例子中,`CASE WHEN`根据经理的薪资级别确定了他们是否是经理,然后将结果合并到同一个查询的结果集中。
阅读全文