2016-02-05 49 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

相关问题