对同一个表中的多个列执行内连接

Posted

技术标签:

【中文标题】对同一个表中的多个列执行内连接【英文标题】:Performing Inner Join for Multiple Columns in the Same Table 【发布时间】:2011-02-17 09:43:45 【问题描述】:

我有一个场景,我有点卡住了。假设我有一个关于颜色的调查,我有一个颜色数据表,另一个用于人们的答案。

tbColors

color_code , color_name
     1     , 'blue'
     2     , 'green'
     3     , 'yellow'
     4     , 'red'

tb答案

answer_id  ,  favorite_color   ,   least_favorite_color   ,  color_im_allergic_to
    1      ,         1          ,         2                            3  
    2      ,         3          ,         1                            4
    3      ,         1          ,         1                            2
    4      ,         2          ,         3                            4

为了显示,我想编写一个 SELECT 来显示答案表,但使用 tbColors 中的 color_name 列。

我理解“最愚蠢”的做法:在 FROM 部分中将 tbColors 命名三次,每列使用不同的别名进行替换。

不愚蠢的方式会是什么样子?

【问题讨论】:

相关***.com/questions/4267929/… 【参考方案1】:

这似乎是要走的路:

SELECT
  A.answer_id
  ,C1.color_name AS favorite_color_name
  ,C2.color_name AS least_favorite_color_name
  ,C3.color_name AS color_im_allergic_to_name
FROM tbAnswers AS A
INNER JOIN tbColors AS C1
  ON A.favorite_color = C1.color_code
INNER JOIN tbColors AS C2
  ON A.least_favorite_color = C2.color_code
INNER JOIN tbColors AS C3
  ON A.color_im_allergic_to = C3.color_code

我敢说这是一个非常标准的查询,而不是“愚蠢”。这也假定所有列都将具有有效值。否则,将所有 INNER JOIN 替换为 LEFT JOIN

【讨论】:

以上是关于对同一个表中的多个列执行内连接的主要内容,如果未能解决你的问题,请参考以下文章

数据库内连接外连接交叉连接

H2 不允许使用集合内的连接执行选择

oracle连接总结(内连接外连接自然连接,交叉连接,自连接)

如何对mysql表中的多个列进行连接

sql server链接查询

SQL中有几种连接?有啥区别?(左连右连内连和外连?)