ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 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())) 

S
Sigurd

你想要更像这样的东西:

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。您所要做的就是像以前一样执行另一个连接。

注意:您会注意到我删除了许多括号,因为在您拥有它们的大多数情况下它们确实不是必需的,并且只会在尝试阅读代码时增加混乱。正确的嵌套是使代码可读和分离的最佳方式。


不会选择 tableN.* 复制列标签中所有匹配的主键 ID? (问题没有指定需要什么输出,但我认为通常你不想这样做)
我可以问为什么 JOINTableCON TableC.cID = TableB.cID 而不是 TableC.cID = TableA.cID。我假设我们将 TableA 加入其他 3 个表。
N
Nemoden
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()

Y
YakovL

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


M
Manu R S

简单的 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;

不使用 OP 的表结构?!