Выполнение внутреннего объединения для нескольких столбцов в той же таблице

У меня есть сценарий, на котором я немного застреваю. Скажем, у меня есть обзор о цветах, и у меня есть одна таблица для цветных данных и другой для ответов людей.

tbColors

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

tbAnswers

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

Для дисплея я хочу записать ВЫБОР, который представляет таблицу ответов, но использование color_name столбца от tbColors.

Я понимаю "самый глупый" способ сделать это: именование tbColors три раза в разделе FROM, с помощью другого псевдонима для каждого столбца для замены.

Как неглупый путь посмотрел бы?

39
задан APC 9 May 2010 в 19:02
поделиться

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 JOINs на LEFT JOINs

78
ответ дан 27 November 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: