MySQL多表连接查询

时间:2010-09-28 01:25:28

标签: sql mysql join

所需结果:Glasgow,Bearsden办公室教练使用的汽车注册号。 我有3张相关表格; (我省略了不相关的表信息,以简化此操作。数据库称为easydrive。

这不是学校或UNI的任务,这是教科书中的一个问题,我们已经给予了这样做,我们可以学习如何做到这一点,没有给予分数,所以你没有做我的作业给我。

**++Staff++**
(PK) Staff ID
(FK) Address ID
(FK) Office
(FK) Car Allocation Number
First Name
Last Name
Position/Title
Office

**++CarAllocation++**
(PK) Car Allocation Number
(FK) Staff ID
(FK) Car ID

**++Car++**
(PK) Car ID
Car Rego

所以我认为我需要这样一个加入,我认为它需要沿着这些方向发展,但我很困惑。

SELECT car.rego
FROM car
WHERE  staff.office=’Glasgow’ OR ‘Bearsden’

有人可以填写空白,以便我可以学习如何执行此操作,我是否需要制作新表?

3 个答案:

答案 0 :(得分:0)

至于car_allocation是一个中间表,最好将它放入FROM子句和JOIN其他子句中:

SELECT car.rego
FROM car_allocation A
JOIN car ON A.car_id = car.car_id
JOIN stuff ON A.stuff_id = stuff.stuff_id
AND (staff.office = 'Glasgow' OR staff.office = 'Bearsden' -- OR some another condition, etc)

注意括号,他们将条件分组。

SELECT car.rego
FROM car_allocation A
JOIN car ON A.car_id = car.car_id
JOIN stuff ON A.stuff_id = stuff.stuff_ids
AND staff.office IN ('Glasgow', 'Bearsden')

如果您有枚举,则可以使用IN运算符。

同样JOININNER JOIN相同。 Here's MySQL manual considering JOIN syntax

答案 1 :(得分:0)

您查询最有可能需要看起来像这样:

SELECT first_name, last_name, car_rego
FROM   staff
JOIN   carallocation ON (carallocation.staff_id = staff.staff_id)
JOIN   car ON (car.car_id = carallocation.car_id)
WHERE  staff.office = 'Glasgow' OR staff.office = 'Bearsden';

请注意,JOIN是MySQL中INNER JOIN的同义词。

答案 2 :(得分:0)

我没有测试过,但这应该会有所帮助。

select car.rego
from car
inner join carrallocation ca on ca.carid = car.carid
inner join staff s on ca.staffid = s.staffid
where s.office in ('Glasgow', 'Bearsden')

您缺少的是表之间的连接。您需要加入中间表以获得员工和汽车表之间的关系。