2016-12-21 3 views
0

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

У меня есть следующие настройки:

База данных:Job1, Таблица:Документ

 

id | rev_desc_id | created_by_id | modified_by_id | checker_id | approver_id 
---|-------------|---------------|----------------|------------|------------ 
1 | 1   | 1    | 1    | 2   | 3 

"rev_desc_id" ссылки MySoftware.dbo.Revision_Description.id

"created_by_id", "modified_by_id", "checker_id", "approver_id" ссылка MyCompany.dbo.Person.id

База данных:MyCompany, Таблица:Person

 

id | first_name | last_name 
---|------------|---------- 
1 | Tom  | DeLonge 
2 | Mark  | Hoppus 
3 | Travis  | Barker 

База данных:MySoftware, Таблица:Revisio n_Description

 

id | name 
---|------------ 
1 | Draft 
2 | For Comment 

У меня есть следующий SQL:

SELECT Document.*, Revision_Description.name AS 'Rev Description', CONCAT(Person.first_name, ' ', Person.last_name) AS 'Created By' 
FROM Document 
INNER JOIN MySoftware.dbo.Revision_Description 
ON rev_desc_id=Revision_Description.id 
INNER JOIN MyCompany.dbo.Person 
ON created_by_id=Person.id 

Это все работает отлично, но теперь я в точке, где мне нужно, чтобы вернуть другие сцепленные имена «модифицированный», " контролер "и" утверждающий ". Я не уверен, как дать эти конкретные имена столбцов, такие как «Созданный AS».

У меня также есть несколько других столбцов, которые также должны соединяться с другими таблицами.

Я довольно новичок в создании базы данных, и я не пытаюсь изо всех сил назвать и правильно связать их, поэтому извиняюсь, если я полностью ошибаюсь со всем этим.

Любая помощь или предложения были бы весьма признательны.

Заранее спасибо.

ответ

0

В течение таблиц поиска Я предпочитаю использовать LEFT JOIN, но вы можете добавить Person таблицы N раз и использовать псевдоним в зависимости от Творца, Checker, ...

SELECT 
    Document.*, 
    Revision_Description.name AS 'Rev Description', 
    CONCAT(C.first_name, ' ', C.last_name) AS 'Created By', 
    CONCAT(M.first_name, ' ', M.last_name) AS 'Modified By', 
    CONCAT(K.first_name, ' ', K.last_name) AS 'Checked By' 
FROM Document 
INNER JOIN MySoftware.dbo.Revision_Description 
ON rev_desc_id=Revision_Description.id 
LEFT JOIN MyCompany.dbo.Person as C 
ON created_by_id=C.id 
LEFT JOIN MyCompany.dbo.Person as M 
ON modified_by_id=M.id 
LEFT JOIN MyCompany.dbo.Person as K 
ON checked_id=K.id 
+0

mcNets, большое спасибо. – squatman

0
SELECT d.*, s.name 'Rev Description', 
    CONCAT(c.first_name, ' ', c.last_name) CreatedBy, 
    CONCAT(m.first_name, ' ', m.last_name) ModifiedBy, 
    CONCAT(k.first_name, ' ', k.last_name) CheckedBy, 
    CONCAT(a.first_name, ' ', a.last_name) ApprovedBy, 

FROM Document d 
    JOIN MySoftware.dbo.Revision_Description s 
     ON s.id = d.rev_desc_id 
    left JOIN MyCompany.dbo.Person c 
     ON c.id = d.created_by_id 
    left JOIN MyCompany.dbo.Person m 
     ON m.id = d.modified_by_id 
    left JOIN MyCompany.dbo.Person k 
     ON k.id = d.checker_id 
    left JOIN MyCompany.dbo.Person a 
     ON a.id = d.approver_id 
+0

Чарльз, спасибо очень. – squatman

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