SQL实现同一表的两个字段对相同的另一张表JOIN查询 郝伟 2021/10/02 [TOC]
1. 问题说明
假设现在有以下两张数据表,Types表存储的是水果类型,而Fruits表中对水果类型有引用。
# Types表
ID TypeName
-------------
1 Banana
2 Orange
3 Pear
4 Melon
# Fruits 表
ID BaseType MainType
---------------------
1 2 1 Category1
2 1 3 Category2
3 3 2 Category3
现在的问题是在Fruits表中有两处索引 BaseType和 MainType 同时对Types表进行引用。在创建视图时,希望得到以下的查询结果。
ID BaseTypeName MainTypeName
----------------------
1 Orange Banana
2 Banana Pear
3 Pear Orange
2. 解决办法
在SQL中,可以实现对同一表的两次JOIN引用,具体实现代码如下所示:
SELECT
Fruits.ID,
Types.TypeName AS BaseTypeName,
Types1.TypeName AS MainTypeName
FROM
Fruits INNER JOIN
Types ON Fruits.BaseType = Types.ID INNER JOIN
Types AS Types1 ON Fruits.MainType = Types1.ID
3. 注意事项
- JOIN的主表为数据表,而不是类型表;
- JOIN对同一引类型表进行多次查询时,为了避免重复使用AS语句建立别名;
- 如果使用INNER JOIN,那么如果有一处引用数据不存在,则整条记录都不存在。如果一定要求返回数据,可以使用LEFT OUTER JOIN的方式。