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. 注意事项

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

results matching ""

    No results matching ""