2016-10-06 27 views
0

私は4つのテーブルインナーは、名前の代わりにID

Table incidences-employees 
--------------------------- 
idIncidenceEmployee PK 
idEmployee FK (employee.idemployee) 
idMasterIncidence FK (incidence-master.idIncidence) 
createdby FK (user-employee.idMongoUser) 
authorizedBy FK (user-employee.idMongoUser) 

Table incidence-master 
--------------------------- 
idIncidence PK 
name 

TAble user-employee 
-------------------------- 
idMongoUser PK 
idEmployee 

Table EMployee 
------------------------- 
idEmployee Pk 
name 
lastName 

を持っているを取得し、私はこのクエリ

SELECT employee.name, incidences-master.name, incidences-employees.* 
    FROM employee-incidences 
    INNER JOIN employee ON employee.idEmployee = employee-incidences.idEmployee 
    INNER JOIN incidences-master ON incidences-master.idIncidence = employee-incidences.idIncidenceEmployee 

が、私はこの

Employee name | Incidence name | idIncidenceEmployee | idEmployee | idMasterIncidence | createdby | authorizedBy 
John Doe  | Incidence Name |    1  | 1  |     5 | abc123 | abc123 

しかしによって作成され、authorizatedに乗るん複数のテーブルを結合します私はIDを取得する、abc123、私が望むのはidと名前をマッチさせること、idはテーブル上にあるuser-employee

Table user-employee   Table Employee 
    ---------------------- - ------------------- 
    idMongoUser -> abc123  idEmployee -> 1 
    idemployee -> 1    Name -> John Doe 

idの代わりにJohn Doeを表示します。

答えて

0

incidences-employees。*は、2つのIDを含むそのテーブルのすべてのフィールドを提供しています。 1つのアプローチは、employee.idemployee = incidences-employee.createdbyとauthorizedbyのincidencesテーブルに従業員テーブルを追加して、さらに2つの結合を実行することです。

。*を使用する代わりに、必要な各フィールドを参照します。

select ... from incidences-employee I 
join employee E1 on E1.idemployee = I.createdby 

次に、createdbyの名前としてE1.nameを参照することができます。

0

あなたは、おそらくこのような何かをしたい:

SELECT employee.name as employeeName, incidences-master.name as incidenceName, e1.name as createdBy, e2.name as authorisedBy 
FROM employee-incidences 
INNER JOIN incidences-master ON incidences-master.idIncidence = employee-incidences.idIncidenceEmployee 
INNER JOIN employee ON employee.idEmployee = employee-incidences.idEmployee 
INNER JOIN user-employee ue1 on ue1.idMongoUser = employee-incidences.createdBy 
INNER JOIN employee e1 on e1.idEmployee = ue1.idEmployee 
INNER JOIN user-employee ue2 on ue2.idMongoUser = employee-incidences.AuthorizedBy 
INNER JOIN employee e2 on e2.idEmployee = ue2.idEmployee 

CREATEDBYまたはauthorisedByが空またはnullになる可能性例があった場合は、その後、私は左インナー

+0

Jayveeに参加代わりに結合を使用することをお勧めしたいです、基本的に以前の回答を反映させるつもりなら、それを少なくとも認めてもいいでしょう。私は彼に全体の質問を渡すのではなく、解決する方法に彼を導くアプローチをとった。私たちのアプローチのどちらも、より正しかったり間違ったりしていません...それでも...それに留意してください。ありがとう。 – nycdan

+0

私のアプローチの主な違いは、使用していない、またはあなたの答えに使用することを提案しているジャンクションテーブル(user-employee)があることです。 – Jayvee

+0

'e1.name as createdBy、e2.name'では、incidences-master.nameとは対照的に、どのテーブルを参照しているのかをmysqlがどのように知っていますか?明示的にテーブル名は –

関連する問題