我有一个名为 auto
的表,其中包含汽车数据(汽车从荷兰语到英语的意思是汽车),如下所示:
+----------+---------------+------------------+------------------+------------------+--------------+----------+----------------+
| Kenteken | Merk | Type | Aantal Cilinders | Chassis nummer | Motor nummer | Eigenaar | Telefoonnummer |
+----------+---------------+------------------+------------------+------------------+--------------+----------+----------------+
“Eigenaar”在荷兰语到英语中是所有者的意思。
该表中没有注册所有者。
所有者的姓名位于另一个名为“客户”的表中。
这是客户端或“clienten”表的样子:
+----------------------+------+--------------+----------------------+----------------------------+----------+----------------------------+
| Naam | ID | t.a.v | Voornaam | Adres | Postcode | Woonplaats |
+----------------------+------+--------------+----------------------+----------------------------+----------+----------------------------+
在此表中,所有客户端都有一个 ID。
客户与他们的汽车在另一个表中链接。
该表在荷兰语中称为关系或“关系”。
该表的外观如下:
+----------+------+
| Kenteken | ID |
+----------+------+
例如,如果 ID 为 1 的客户端拥有一辆车牌号为“123-1230”的汽车,则表格如下所示:
+----------+------+
| Kenteken | ID |
+----------+------+
| 123-1230 | 1 |
Kenteken 在英语中是车牌的意思。
我的目标是更新 auto.Eigenaar
中的所有行
这是我到目前为止所拥有的:
UPDATE auto SET Eigenaar =
(SELECT Naam FROM clienten WHERE ID IN (
SELECT ID FROM relatie LEFT JOIN auto ON relatie.Kenteken = auto.Kenteken
)
) WHERE Kenteken IN (
SELECT Kenteken FROM relatie WHERE ID IN (
SELECT ID FROM relatie LEFT JOIN auto ON relatie.Kenteken = auto.Kenteken
)
LIMIT 1
)
我不知道下一步该做什么。
有谁知道如何做到这一点?
谨致问候,
最佳答案
您可以通过连接 3 个表来实现:
UPDATE auto a
INNER JOIN relatie r ON r.Kenteken = a.Kenteken
INNER JOIN clienten c ON c.ID = r.ID
SET a.Eigenaar = c.Naam
首先,将表 auto
连接到表 relatie
的列 Kenteken
,然后连接表 relatie
到表 clienten
的 ID
列中,您可以从列 Naam
中获取客户端的名称。
请注意,对于关系数据库,不建议将客户/所有者的名称存储在表 auto
中。您应该存储的是 ID
,就像您在表 relatie
中所做的那样。
关于MySQL 从 2 个不同的表更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59532746/