SQL实现同一表的两个字段对相同的另一张表JOIN查询
郝伟 2021/10/02

问题说明

假设现在有以下两张数据表,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

解决办法

在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

注意事项

  1. JOIN的主表为数据表,而不是类型表;
  2. JOIN对同一引类型表进行多次查询时,为了避免重复使用AS语句建立别名;
  3. 如果使用INNER JOIN,那么如果有一处引用数据不存在,则整条记录都不存在。如果一定要求返回数据,可以使用LEFT OUTER JOIN的方式。