我怎样才能join多个SQL表使用ID?
我有4个不同的表,我想join。 这些表格的结构如下:
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,我得到一个错误“TableD”未知:
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()))
你想要更像这样的东西:
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
。 你所要做的就是像以前一样进行另一次连接。
注意:您会注意到我删除了许多括号,因为在大多数情况下它们确实不是必需的,只会在尝试阅读代码时添加混淆。 适当的嵌套是使代码可读和分离的最佳方式。
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()
您还没有joinTABLED,只是从其中一个表中select了FIELD TABLED。
简单的内部联接视图代码….
CREATE VIEW room_view AS SELECT a.*,b.* FROM j4_booking a INNER JOIN j4_scheduling b on a.room_id = b.room_id;