2013-05-03 3 views
1

Я пытаюсь сделать запрос SELECT, который получает названия картин и скульптур и соответствующего artistID.SQL Присоединиться: Таблицы того же типа

Вот схема:

Paintings(paintingID, title, painterID) p

Sculptures(scluptureID, title, sculptorID) s

Я думаю, что я должен использовать JOIN, но я не знаю, что присоединиться без получения странных результатов. Если я присоединяюсь к ON p.painterID=s.sculptorID, тогда я получаю результаты только для художников, которые являются как художниками, так и скульпторами. Я хочу получить все скульптуры и картины, рассматривая их как «искусство» и рассматривая художников и скульптуры как «художников», так что каждая строка будет содержать все значения, заполняя колонки, которых нет в другой таблице, с NULL s (схема в реальной жизни немного больше). Как я буду делать это/что мне не хватает?

+1

Вы должны исправить 'scluptures' для' скульптур'. Кроме того, это [отношение многих ко многим] (http://sqlrelationship.com/many-to-many-relationship/), вы должны прочитать об этом. Вам нужно использовать [Union] (http://msdn.microsoft.com/en-CA/library/ms180026.aspx) – phadaphunk

ответ

4

Вам не нужен Join, вам нужно использовать UNION запрос:

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

Это позволит выбрать все картины из Paintings стола, и все скульптуры из Sculptures таблицы. Оба painterID и sculptorID будут иметь псевдоним artistID.

+0

'{...}', потому что это отношение «многие ко многим». – phadaphunk

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