Mysql多对多表查询
我有三张桌子,汽车,司机,汽车和司机 我的cars表有两个字段-carid和car\u model “我的驱动程序”表有两个字段-driverid和driver\u name 我的cars\u drivers有两个字段,分别是主键carid和driverid 我的cars表中有3个条目Mysql多对多表查询,mysql,sql,Mysql,Sql,我有三张桌子,汽车,司机,汽车和司机 我的cars表有两个字段-carid和car\u model “我的驱动程序”表有两个字段-driverid和driver\u name 我的cars\u drivers有两个字段,分别是主键carid和driverid 我的cars表中有3个条目 丰田 本田 起亚 而我的司机表 鲍勃 汤姆 我的汽车司机表是什么样的?我会在carId中输入3或更少的数字,在DriverId中输入2或更少的数字吗 1-1 1-2 1-3 我将如何进行查询以显示3个随机驾驶员
1-1
1-2
1-3
我将如何进行查询以显示3个随机驾驶员的车型
我在找像这样的东西
toyota bob
kia tom
honda bob
我已经阅读了一些教程,但我也不了解联接是如何工作的。请说您的表是这样的:
Table 1: Drivers
id Name
1 Joe Bloggs
2 Si Borg
3 Anne Droyd
Table 2: Cars
id Type
9 Honda
8 Toyota
7 Kia
Table 3: CarDrivers
CarId DriverId
9 1
9 2
8 2
7 3
你的问题是:
select d.name, c.type
from Drivers d
inner join CarDrivers cd
on d.id = cd.DriverId
inner join Cars c
on cd.CarId = c.id
给出结果:
Name Type
Joe Bloggs Honda
Si Borg Honda
Si Borg Toyota
Anne Droyd Kia
CarDriver表基本上是将驾驶员与他们驾驶的汽车联系起来;i、 e.表中的第一行表示id为1的驾驶员驾驶id为9的汽车。连接相关信息。进入car_driver(汽车驾驶员)系统会告诉您汽车是由驾驶员驾驶的。如果你只是想显示一个随机的驱动程序,你根本不需要一个连接,只需要获取所有的驱动程序并从列表中随机选择一个 然而,数据库通常与信息相关。例如,一个拥有他们曾经的工作的人。你不能只是把一份随机的工作放在某人的旁边,你要用一个连接来获得正确的关系 差不多
SELECT * FROM jobs
LEFT JOIN people_jobs ON jobs.jobid = people_jobs.jobid
LEFT JOIN people ON people.personid = people_jobs.personid
WHERE person.personname = 'Bob Smith'
会给你提供鲍勃所有工作的信息
何处为
SELECT * FROM people
LEFT JOIN people_jobs ON people.personid = people_jobs.personid
LEFT JOIN jobs ON jobs.jobid = people_jobs.jobid
WHERE jobs.job = 'Waiter '
您的模式应确保
cars\u drivers
表中有两列(字段),它们共同构成一个复合主键,分别是cars
和drivers
表的外键
cars\u drivers
表记录了每个驾驶员“可以”或“做”或“想要”驾驶的汽车
对于给定数据,carid
列中的值应在1-3范围内;driverid
列中的值应在1-2范围内。假设您正在使用InnoDB存储,这些约束应该自动强制执行(我保留对MyISAM的判断,但我认为它不强制执行PK-FK约束)
您可以从以下三个表中进行选择:
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\u 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;
您的cars\u drivers表存储关于哪些车辆由哪些驾驶员驾驶的信息。如果鲍勃驾驶起亚,你会把(3,1)装进汽车里。联接通常不用于随机数据,但更多用于显示数据之间的关系确实很容易理解+1.
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;