您的模式应该是这样的表有两列(字段),它们共同形成一个复合主键,并且分别是和表cars_drivers
的外键。cars
drivers
该cars_drivers
表记录了每位驾驶员“可以”或“愿意”或“想要”驾驶的汽车。
对于给定的数据,carid
列中的值应在 1-3 范围内;列中的值driverid
应在 1-2 范围内。假设您使用 InnoDB 存储,这些约束应该自动强制执行(我保留对 MyISAM 的判断,但我认为它不会强制执行 PK-FK 约束)。
CREATE TABLE cars_drivers
(
carid INTEGER NOT NULL REFERENCES cars,
driverid INTEGER NOT NULL REFERENCES drivers,
PRIMARY KEY(carid, driverid)
); -- Plus storage options as required ...
您可以从三个表中选择:
SELECT c.*, d.*
FROM cars AS c
JOIN cars_drivers AS j ON c.carid = j.carid
JOIN drivers AS d ON d.driverid = j.driverid;
您可以根据需要在联接上应用条件。请注意,显示此联接中的任何数据并没有特别的好处,cars_drivers
因为这些值将与其他两个表中的值之一相同。
要仅获取模型名称和驱动程序名称,您只需指定这些列:
SELECT c.car_model, d.driver_name
FROM cars AS c
JOIN cars_drivers AS j ON c.carid = j.carid
JOIN drivers AS d ON d.driverid = j.driverid;