2016-01-04 7 views
2

Я все еще новичок в SQL, поэтому этот вопрос может звучать довольно просто. Я использую базу данных Oracle, и я могу использовать только select. У меня есть 2 таблицы Names и Worksite:Присоединение нескольких таблиц в одном конкретном столбце

Names стол

ID Full name Type 
----------------------- 
1 Sibelga  Company 
2 Belgacom Company 
3 Brussels Authority 
4 Etterbeek Authority 

Worksite стол

ID Worksite CompanyID AuthorityID 
----------------------------------- 
12569  1    3 
4563   2    4 
1589   1    4 
1489   1    3 

Я в принципе хочу, чтобы получить полное имя Authority и Company для каждой стройплощадке.

Я пытаюсь сделать соединение, но оно возвращает только имя Authority или Company. Я пытаюсь выполнить следующий запрос, но это не работает, любая идея, где я ошибаюсь?

select 
    ID worksite, 
    Full name, 
    Full name 
from  
    Worksite 
join  
    Names on worksite.companyID = names.ID 
+3

Если поле определено как «Полное имя», вам нужно использовать двойные кавычки, такие как 'select ID,« Полное имя »из ...' –

+0

Извините, я действительно не понимаю, что вы имеете в виду. Я в основном хочу получить полное имя Компании и Органа для каждого рабочего места. Но простой Join не работает шов. – philippe

+0

Рассмотрите возможность изменения дизайна базы данных. С учетом приведенного дизайна вы можете ошибочно дать компании имя органа управления и наоборот. У вас есть две таблицы, одна для компаний, одна для властей. –

ответ

4

Если вам нужно получить два названия, то вам необходимо присоединиться к столу два раза:

SELECT 
    WS."ID worksite", 
    C."Full name" AS CompanyName, 
    A."Full name" AS AuthorityName 
FROM 
    Worksite AS WS 
LEFT OUTER JOIN Names C ON C.ID = WS.CompanyID 
LEFT OUTER JOIN Names A ON A.ID = WS.AuthorityID 

я использовал LEFT OUTER JOIN, потому что вы не упоминаете, если идентификаторы всегда будут заполнены или нет. Если они всегда будут там, вы можете использовать INNER JOIN. Я также очень настороженно отношусь к таблице под названием «Имена». Это, как правило, красный флаг для плохо разработанной базы данных.

+0

Спасибо, я попробую это и посмотрю, работает ли оно. Идентификаторы всегда заполняются, поэтому я попробую внутреннее соединение. Буквы C и A, которые вы добавляете, могут быть случайными, я думаю (в этом случае, я думаю, вы выбрали C для компании и A для авторитета? – philippe

+0

Да, это псевдонимы таблиц. Они могут использоваться для различения нескольких экземпляров одного и того же таблицы в запросе или просто для того, чтобы сделать код более понятным или более простым для записи/чтения. –

+0

благодарит за помощь, но, похоже, это не работает. В журнале говорится, что он не распознает буквы, которые я добавляю. Любая идея, где я «Я ошибаюсь? Я использую базу данных Oracle – philippe

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