如何使用 ID 连接多个 SQL 表?

我有4个不同的表,我想加入。这些表的结构列如下:

TableA - aID | nameA | dID


TableB - bID | nameB | cID | aID


TableC - cID | nameC | date


TableD - dID | nameD

从表 A 开始,我了解了如何使用 b 对表 a 和 c 进行连接,因为 b 具有这些表的主键。我希望能够连接 TableA 上的 TableD 表。下面是我的 SQL 语句,它首先连接表 A 和 B,然后连接表 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()))
454532 次浏览

您还没有加入 TableD,只是从其中一个表中选择了 TableDFIELD (dID)。

你想要更像这样的东西:

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()

简单的内连接视图代码... 。

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