2016-02-05 50 views
0

我在構建正確的SQL JOIN語句以從另一個表中選擇某些記錄時遇到問題。SQL JOIN:從其他表中選擇具有匹配ID的記錄

--Table Product: 
ID 
Name 
CatID1 
CatID2 

--Table Category: 
CatID 
CategoryName 

Product.CatID1Product.CatID2都參考Category.CatID

所以,我真的要選擇Product領域,並與Category.CategoryName取代Product.CatID1Product.CatID2(用於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 JOINcategories表:

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 

如果沒有匹配任何CatID1CatID2SELECT子句中的相應字段將爲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 ; 

使用類別表兩次。

如果您在將來決定產品可以分爲三類,該怎麼辦?真的,你應該有一個加入這些表並刪除產品的重複信息。

+1

根據Giorgos的回答,兩個左連接會更好,但是關於多對多連接的觀察很重要 – Pete

+0

是的,有兩個CatID列通常是個不錯的主意。 – jarlh

相關問題