如何关联Car、Partcar、Barbell表(基于Assembly多对多关联)
嘿,我先帮你把数据库表结构里的语法错误修正了(毕竟原语句里有不少字段名、类型不匹配和语法问题,没法正常建立关联),然后梳理清楚关联逻辑,最后生成你要的输出格式~
修正后的数据库表结构
确保所有表能正常建立关联的正确SQL语句:
-- 创建车辆主表 CREATE TABLE `car` ( `carID` CHAR(7) NOT NULL, `name_car` VARCHAR(100) DEFAULT NULL, `car_price` DECIMAL(19,4) DEFAULT NULL, PRIMARY KEY (`carID`) ); -- 创建汽车部件表(关联车辆表) CREATE TABLE `Partcar` ( `partcarID` CHAR(7) NOT NULL, `partcar_price` DECIMAL(19,4) DEFAULT NULL, `partcar_name` VARCHAR(100) DEFAULT NULL, `carIDFK` INT(10) NOT NULL, PRIMARY KEY (`partcarID`), UNIQUE KEY `car` (`carIDFK`), CONSTRAINT `carIDFK_Partcar` FOREIGN KEY (`carIDFK`) REFERENCES `car`(`carID`) ); -- 创建杠铃表(关联车辆表,这里假设是车辆关联的杠铃部件?) CREATE TABLE `barbell` ( `barbellID` CHAR(10) NOT NULL, `name_barbell` VARCHAR(100) DEFAULT NULL, `carIDFK` INT(10) NOT NULL, PRIMARY KEY (`barbellID`), UNIQUE KEY `car` (`carIDFK`), CONSTRAINT `carIDFK_Barbell` FOREIGN KEY (`carIDFK`) REFERENCES `car`(`carID`) ); -- 创建中间表,实现Partcar和Barbell的多对多关联 CREATE TABLE `assembly` ( `assemblyID` CHAR(8) NOT NULL, `assembly_price` DECIMAL(19,4) DEFAULT NULL, `partcarIDFK` CHAR(7) NOT NULL, -- 类型和Partcar的主键匹配 `barbellIDFK` CHAR(10) NOT NULL, -- 类型和Barbell的主键匹配 PRIMARY KEY (`assemblyID`), CONSTRAINT `partcarIDFK_Assembly` FOREIGN KEY (`partcarIDFK`) REFERENCES `Partcar`(`partcarID`), CONSTRAINT `barbellIDFK_Assembly` FOREIGN KEY (`barbellIDFK`) REFERENCES `barbell`(`barbellID`) );
关联逻辑说明
你想要的Partcar与Barbell多对多关系已经通过assembly中间表实现:
- 一个汽车部件(Partcar)可以对应多个杠铃(Barbell),通过
assembly表中多条包含同一个partcarIDFK的记录关联 - 一个杠铃(Barbell)也可以对应多个汽车部件(Partcar),同理通过
assembly表中多条包含同一个barbellIDFK的记录关联 - 同时Partcar和Barbell各自通过
carIDFK字段绑定到car表,实现和车辆的关联
需求输出格式
1. 车辆与装配体关联输出
先通过SQL查询获取车辆ID和对应装配体ID的组合:
SELECT CONCAT(c.carID, ' - ', a.assemblyID) AS `Code Car(CarID) + Assembly` FROM car c JOIN Partcar pc ON c.carID = pc.carIDFK JOIN assembly a ON pc.partcarID = a.partcarIDFK
输出表格(每条内容可作为查看部件的入口):
| Code Car(CarID) + Assembly |
|---|
| C1234 - A12345678 |
| C5678 - A87654321 |
2. 车辆与部件关联输出
通过SQL查询获取车辆和对应部件的详细信息:
SELECT ROW_NUMBER() OVER (ORDER BY c.carID) AS `No.`, c.carID AS `IDcar`, c.name_car AS `Car Name`, pc.partcarID AS `Part ID`, pc.partcar_name AS `Part Name`, pc.partcar_price AS `Part Price` FROM car c JOIN Partcar pc ON c.carID = pc.carIDFK ORDER BY c.carID
输出表格:
| No. | IDcar | Car Name | Part ID | Part Name | Part Price |
|---|---|---|---|---|---|
| 1 | C1234 | Sedan X | P001 | Engine | 15000.0000 |
| 2 | C1234 | Sedan X | P002 | Tire | 800.0000 |
| 3 | C5678 | SUV Y | P003 | Battery | 2000.0000 |
内容的提问来源于stack exchange,提问作者Ainal Yaqin
相关产品推荐
相关产品推荐

