2012-03-24 17 views
127

我有4個不同的表,我想加入。該表的列結構如下:如何使用ID連接多個SQL表?

TableA - aID | nameA | dID 

TableB - bID | nameB | cID | aID 

TableC - cID | nameC | date 

TableD - dID | nameD 

的表A開始,我瞭解如何加入採用B表a和c,由於B對這些表的主鍵。我希望能夠在TableA上連接表TableD。下面是我認爲首先加入表A和B的SQL語句,然後加入,爲C:

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA 
ON TableB.aID= TableA.aID) 
INNER JOIN TableC ON(TableB.cID= Tablec.cID) 
WHERE (DATE(TableC.date)=date(now())) 

當我嘗試添加其他加盟,包括d,我得到一個錯誤,「提交」未知:

SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA 
    ON TableB.aID= TableA.aID) 
    INNER JOIN TableC ON(TableB.cID= Tablec.cID) 
    INNER JOIN TableA ta ON(ta.dID= TableD.dID) 
    WHERE (DATE(TableC.date)=date(now())) 

回答

268

你想要更多的東西是這樣的:

SELECT TableA.*, TableB.*, TableC.*, TableD.* 
FROM TableA 
    JOIN TableB 
     ON TableB.aID = TableA.aID 
    JOIN TableC 
     ON TableC.cID = TableB.cID 
    JOIN TableD 
     ON TableD.dID = TableA.dID 
WHERE DATE(TableC.date)=date(now()) 

在你的榜樣,你實際上並沒有包括TableD。你所要做的就是執行另一個連接,就像你以前做的一樣。

注意:您會注意到我刪除了許多括號,因爲在大多數情況下它們確實不是必需的,只會在嘗試閱讀代碼時增加混淆。適當的嵌套是使代碼可讀和分離的最佳方式。

+2

不會選擇tableN。*複製所有匹配的主鍵ID列標籤的? (問題沒有說明需要輸出什麼,但通常你不想這麼做) – 2015-06-24 08:40:18

+2

我可以問爲什麼'JOINTableC'是'ON' TableC.cID = TableB.cID'而不是'TableC.cID = TableA.cID'。我認爲我們正在將'TableA'加入其他3個表格。 – emihir0 2015-10-28 23:48:33

4

您還沒有加入TABLED只是從其中一個表中選擇了FIELD TABLED。

20
SELECT 
    a.nameA, /* TableA.nameA */ 
    d.nameD /* TableD.nameD */ 
FROM TableA a 
    INNER JOIN TableB b on b.aID = a.aID 
    INNER JOIN TableC c on c.cID = b.cID 
    INNER JOIN TableD d on d.dID = a.dID 
WHERE DATE(c.`date`) = CURDATE() 
1

簡單的INNER JOIN VIEW代碼....

CREATE VIEW room_view 
AS SELECT a.*,b.* 
FROM j4_booking a INNER JOIN j4_scheduling b 
on a.room_id = b.room_id; 
+0

不使用OP的表格結構?! – 2017-11-09 17:36:44