2013-05-03 44 views
1

我试图做一个SELECT查询获取绘画和雕塑的标题和相应的艺术家ID。SQL加入:同类表

这里是架构:

Paintings(paintingID, title, painterID) p

Sculptures(scluptureID, title, sculptorID) s

我想我必须使用一个JOIN,但我不知道加入什么就没有得到奇怪的结果。如果我加入ON p.painterID=s.sculptorID,那么我只能得到既是画家又是雕塑家的艺术家的成果。我想获得所有的雕塑和绘画,把它们当作“艺术”,把画家和雕塑当作“艺术家”,这样每一行都会包含所有的价值观,填充另一张表中不存在的列,其中NULL s (该模式在现实生活中有点大)。我该怎么去做/我错过了什么?

+1

你应该改正'sculptures'为'sculptures'。这也是[多对多关系](http://sqlrelationship.com/many-to-many-relationship/),你应该阅读它。您需要使用[Union](http://msdn.microsoft.com/en-CA/library/ms180026.aspx) – phadaphunk 2013-05-03 20:49:05

回答

4

你不需要加入,你需要使用一个UNION查询:

SELECT title, painterID artistID 
FROM Paintings 
UNION ALL 
SELECT title, sculptorID artistID 
FROM Sculptures 

这将选择从Sculptures表从Paintings表中的所有绘画和雕塑的所有。 painterIDsculptorID都将具有artistID的别名。

+0

'{...}',因为这是'多对多关系'。 – phadaphunk 2013-05-03 20:51:19