как выбрать данные из двух таблиц, где одна таблица содержит несколько столбцов с идентификаторами - PullRequest
2 голосов
/ 18 марта 2012

У меня есть две таблицы:

  • продукты: идентификатор, имя_продукта, цвет_1 (идентификатор), цвет_2 (идентификатор), цвет_3 (идентификатор)
  • цвета: id, цвет

Я хочу выбрать все товары с цветами.

Продукты:

id  product_name    color_1(id) color_2(id) color_3(id)
--------------------------------------------------------
1   Apple       1       2       3
2   Table       2       3       0

Цвет:

id  color
---------
0   False
1   Blue
2   Green
3   Yellow

Я хочу получить в одном запросе:

1   Apple       Blue        Green       Yellow
2   Table       Green       Yellow      False

Ответы [ 3 ]

4 голосов
/ 18 марта 2012

Использовать внутренние соединения.

SELECT     p.product_name, c1.color, c2.color, c3.color
FROM       Products p
INNER JOIN Colors c1 ON c1.id = p.color_1
INNER JOIN Colors c2 ON c2.id = p.color_2
INNER JOIN Colors c3 ON c3.id = p.color_3

На основе ваших комментариев :

Если вы хотите получить результаты в случае, если некоторые идентификаторы цвета продукта не применяются, переключитесь на ВЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ Это не отфильтрует записи, и просто возвращает NULL для всех столбцов, если нет значения для объединения.

SELECT          p.product_name, c1.color, c2.color, c3.color
FROM            Products p
LEFT OUTER JOIN Colors c1 ON c1.id = p.color_1
LEFT OUTER JOIN Colors c2 ON c2.id = p.color_2
LEFT OUTER JOIN Colors c3 ON c3.id = p.color_3
1 голос
/ 18 марта 2012

Это должно работать:

select p.id, p.product_name, c1.color, c2.color, c3.color
from products p, colors c1, colors c2, colors c3
where c1.id=p.color_1 and
      c2.id=p.color_2 and
      c3.id=p.color_3
0 голосов
/ 18 марта 2012

Попробуйте это:

select p.id, p.product_name, c1.color color_1, c2.color color_2, c3.color color_3
from products p
join colors c1 on p.color_1 = c1.id
join colors c2 on p.color_2 = c2.id
join colors c3 on p.color_3 = c3.id

Вам просто нужно объединить каждое поле, чтобы получить соответствующий цвет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...