我怎样才能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; 
  • 如何在Java中将日历转换为java.sql.Date?
  • 如何在Grails中loggingSQL语句
  • 实施软删除的最佳方法是什么?
  • 数据库与文件系统中的图像
  • 你可以在SQL中有if-then-else逻辑吗?
  • MySQL / SQL检索文本字段的前40个字符?
  • Postgres:如何做复合键?
  • Djangotesting应用程序错误 - 创buildtesting数据库时出现错误:权限被拒绝创build数据库
  • MySQL:Curdate()vs Now()
  • REGEX从列表中select第n个值,允许空值
  • 在Oracle数据库中search具有特定列名的表?