2016-02-05 4 views
0

У меня возникли проблемы с созданием правильного оператора SQL JOIN, чтобы выбрать некоторые записи из другой таблицы.SQL JOIN: выбор записей из другой таблицы с соответствующими идентификаторами

--Table Product: 
ID 
Name 
CatID1 
CatID2 

и

--Table Category: 
CatID 
CategoryName 

Product.CatID1, Product.CatID2 ссылаются на Category.CatID

Так что я действительно хочу, чтобы выбрать Product поля и заменить Product.CatID1, Product.CatID2 с Category.CategoryName (для Product.CatID1) и Category.CategoryName (для Product.CatID2).

Это, очевидно, не работает, но объясняет, что мне нужно:

SELECT Product.ID, Product.Name, 
     Category.CategoryName as Product.CatID1, 
     Category.CategoryName as Product.CatID2 
from product, categories; 

ответ

2

Все, что вам нужно, это двойной LEFT JOIN к categories таблице:

SELECT p.ID, p.Name, 
     c1.CategoryName as CatID1, 
     c2.CategoryName as CatID2 
from product AS p 
LEFT JOIN categories AS c1 ON p.CatID1 = c1.CatID 
LEFT JOIN categories AS c2 ON p.CatID2 = c2.CatID 

Если совпадений не найдено ни для CatID1 или CatID2 , соответствующее поле в предложении SELECT будет NULL.

0
SELECT Product.ID, 
Product.Name, 
C1.CategoryName as Product.CatID1, 
C2.CategoryName as Product.CatID2 
FROM Product JOIN Category C1 ON C1.CatID = CatID1 
JOIN Category C2 ON C2.CatID = CatID2 ; 

Используйте таблицу категорий дважды.

Что делать, если вы в будущем решаете, что продукт может быть в 3 категориях? На самом деле у вас должна быть таблица соединений для этого и удалить повторяющуюся информацию из Product.

+1

В соответствии с ответом Гиоргоса два левых соединения были бы лучше, но наблюдение за многократным ПРИСОЕДИНЕНИЕМ важно – Pete

+0

Да, наличие двух столбцов CatID обычно плохое. – jarlh

Смежные вопросы