我怎样才能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())) 

4 Solutions collect form web for “我怎样才能join多个SQL表使用ID?”

你想要更像这样的东西:

 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; 
  • 在同一列上select多个WHERE条件
  • 关系数据库中的“Tuple”是什么意思?
  • 在过去24小时内查找带有date字段的logging
  • 结束使用closures打开的SQL连接
  • 你怎么能通过SQL连接到postgreSQL数据库的活动用户?
  • 我如何才能在Oracle上使用SQL?
  • Postgres:SQL列出表外键
  • mysql_real_escape_string()是否完全防止SQL注入?
  • 什么是你最有用的数据库标准?
  • SELECT INTO使用Oracle
  • SQL按所有列分组