2016-02-15 171 views
4

我有,我已經離開加盟,但我想從表3是內與表連接添加一個字段3個表2.MySQL的:左連接和內部連接在一個子查詢

Table1 
id 
name 
surname 
table2_fk 

Table2 
id 
entry_name 
entry_code 
table3_fk 

Table3 
id 
type_name 
type_desc 

SELECT `Name`, `Type Description` 
(SELECT 
Table1.name AS `Name`, 
Table1.surname AS `Surname`, 
t2.entry_name AS `Entry`, 
t2.entry_code AS `Entry Code`, 
t3.type_name AS `Type Name`, 
t3.type_desc AS `Type Description` 

FROM Table1 
LEFT JOIN table2 AS t2 ON Table1.table2_fk = t2.id 
LEFT JOIN table3 AS t3 ON Table2.table3_fk = t3.id 
) as subquery 

我所需結果是有T2內連接T3,並從表1和表讓現場3

根據我的子查詢我想NameType Description顯示

+0

請包括示例輸入和輸出,以便我們不hav e推測。 –

+0

你是什麼意思?你想實現什麼 – sagi

+0

目前你的查詢有什麼問題? – shmosel

回答

1

如果你想INNER JOINtable2table3然後LEFT JOINtable1然後做到這一點:

SELECT t1.name, t.type_desc AS `Type Description` 
FROM Table1 AS t1 
LEFT JOIN (
    SELECT t2.id, t3.type_desc 
    FROM table2 AS t2 
    INNER JOIN table3 AS t3 ON t2.table3_fk = t3.id 
) AS t ON t1.table2_fk = t2.id 

但是,這可能是也許表示只是爲:

SELECT t1.name, t3.type_desc AS `Type Description` 
FROM Table1 AS t1 
LEFT JOIN table2 AS t2 ON t1.table2_fk = t2.id 
LEFT JOIN table3 AS t3 ON t2.table3_fk = t3.id 
+0

我不認爲第二個查詢是相同的。如果表2中有一行匹配表1但不匹配表3,該怎麼辦?你的第一個查詢將排除它,但不是你的第二個查詢。 – shmosel

+0

@shmosel這是正確的,第二個查詢*可能會返回比第一個更多的記錄。這取決於實際的數據。 –

0

我相信你正在嘗試左連接表1與內連接的結果表2和表3之間

select t1.name, t_res.type_desc from table1 t_1 
left join (
    select t_2.id, t_3.type_desc from table2 t_2 
    inner join table3 t_3 on t_2.table3_fk = t_3.id 
) as t_res on t_1.table2_fk = t_2.id