表1
状态_id | 详细_id | region_id | 客户名称 |
---|---|---|---|
0000 | 1212 | 1112 | 杰克 |
0101 | 2222 | 1113 | 吉尔 |
表2
值_id | 价值 |
---|---|
0000 | 请求 |
0101 | 完成 |
1212 | 待定 |
2222 | 重新处理 |
1112 | 北美 |
1113 | 欧洲 |
结果
状态 | 细节 | 地区 | 客户名称 |
---|---|---|---|
请求 | 待定 | 北美 | 杰克 |
完成 | 重新处理 | 欧洲 | 吉尔 |
我尝试过这个查询,还有其他方法吗?
select
b.value AS status,
c.value AS detail,
d.value AS region,
a.cust_name
from table1 a
left join table2 b ON a.status_id =b.value_id
left join table2 c ON a.detail_id = c.value_id
left join table2 d ON a.region_id = d.value_id;
您的查询适合给定的任务。但是,您不应该使用没有意义的表别名。 a、b、c什么也没说,很容易混淆。请使用助记别名,例如 s 表示状态,d 表示详细信息,r 表示区域。
但是您的数据模型存在一个问题。由于您将一张表用于不同的事情,因此无法保证数据的完整性。虽然您可以说必须在值表中找到 status_id、detail_id 和 Region_id,但 DBMS 不知道哪一行是哪一行。因此,您可能会存储状态 = 北美、详细信息 = 欧洲、区域 = 待处理的行。更改您的数据库并为每个实体创建一个表,以便弄清楚这一点。