使用case when根据条件不同关联两张不同的表
时间: 2023-06-29 15:09:20 浏览: 335
可以使用以下SQL语句实现:
```
SELECT *
FROM table1 t1
LEFT JOIN (
SELECT id, name
FROM table2
WHERE condition1 = true
) t2_1 ON t1.id = t2_1.id
LEFT JOIN (
SELECT id, name
FROM table2
WHERE condition2 = true
) t2_2 ON t1.id = t2_2.id
WHERE t1.some_condition = true
```
在这个例子中,我们使用了两个子查询来连接不同的表,这两个子查询分别根据不同的条件返回不同的结果集。然后,我们使用LEFT JOIN将这两个子查询连接到主查询中。
请注意,这里使用了LEFT JOIN而不是INNER JOIN,这是因为我们并不确定每个t1.id都会在两个子查询中都有匹配项。如果您确定每个t1.id将在两个子查询中都有匹配项,则可以使用INNER JOIN代替LEFT JOIN。
相关问题
mysql两张表模糊匹配
两张MySQL表进行模糊匹配可以使用like语法来实现。首先,需要确保两个关联键是包含关系。可以使用concat函数将关联键拼接成模糊匹配的格式。例如,如果要实现两个字段模糊匹配,可以使用类似以下的语句:
```
SELECT a.*, cp.*, case when cp.config_name is not null then concat(class_lv1,'-',class_lv2) else '-' end as class
FROM (
SELECT config_name, cluster
FROM pf_cost_daily_summary
WHERE day_id=20230608
GROUP BY day_id,hulk_id,config_name,cluster,cluster_path
) a
LEFT JOIN pf_cost_classproject_hdfs cp
ON a.cluster=cp.cluster AND a.config_name LIKE CONCAT('%',cp.config_name,'%')
```
这个查询语句中,使用了concat函数将cp.config_name拼接成了模糊匹配的格式,然后使用like语法进行匹配。\[1\]
另外,如果需要求出技能的频率,可以使用类似以下的语句:
```
SELECT skill, COUNT(*) as quantity
FROM skill_table st
INNER JOIN v_data_clean v
ON v.parse2_job_detail LIKE CONCAT('%',st.skill,'%')
GROUP BY st.skill
```
这个查询语句中,使用了concat函数将st.skill拼接成了模糊匹配的格式,然后使用like语法进行匹配,并使用count函数统计频率。\[2\]
#### 引用[.reference_title]
- *1* [MySQL两个字段模糊匹配](https://blog.csdn.net/weixin_43433596/article/details/131130613)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [MySQL中两个表间的模糊查询](https://blog.csdn.net/qq_45927174/article/details/129620770)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
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 ]