如何实现含All关键字的数据表关联,生成指定输出结果?
数据表关联问题求助
需要关联两张数据表,当数据表1的Food字段为All时,需为所有食物种类生成对应的关联行。
数据表1
| restaurant | Food |
|---|---|
| restaurant1 | pancake |
| restaurant2 | egg |
| restaurant3 | All |
数据表2
| Column 1 | column 2 |
|---|---|
| A | pancake |
| B | egg |
预期输出
| restaurant | Food | Column 1 |
|---|---|---|
| restaurant1 | pancake | A |
| restaurant2 | egg | B |
| restaurant3 | pancake | A |
| restaurant3 | egg | B |
SQL解决方案
通过条件关联实现需求,JOIN时判断Food字段是否为All:如果是则匹配数据表2的所有食物,否则匹配对应食物。
SELECT t1.restaurant, t2.column2 AS Food, t2.Column1 FROM table1 t1 JOIN table2 t2 ON t1.Food = t2.column2 OR t1.Food = 'All' ORDER BY t1.restaurant, t2.column2;
- 用
INNER JOIN会过滤掉表1中不匹配表2的行;若需保留这类行,替换为LEFT JOIN即可。
Pandas解决方案(Python)
import pandas as pd # 构造数据表 df1 = pd.DataFrame({ 'restaurant': ['restaurant1', 'restaurant2', 'restaurant3'], 'Food': ['pancake', 'egg', 'All'] }) df2 = pd.DataFrame({ 'Column 1': ['A', 'B'], 'column 2': ['pancake', 'egg'] }) # 拆分普通行与All行分别处理 normal_df = df1[df1['Food'] != 'All'] all_df = df1[df1['Food'] == 'All'] # 普通行直接关联 result_normal = pd.merge(normal_df, df2, left_on='Food', right_on='column 2', how='inner') # All行与表2全量关联 result_all = pd.merge(all_df, df2, how='cross').drop(columns='Food').rename(columns={'column 2': 'Food'}) # 合并结果并整理列顺序 final_result = pd.concat([result_normal, result_all], ignore_index=True)[['restaurant', 'Food', 'Column 1']] print(final_result)
内容的提问来源于stack exchange,提问作者aminfoo
相关产品推荐
相关产品推荐

