我想回答这个问题,因为我已经在互联网上搜索但未找到。问题是“如何构造数据以促进一对多关系中的JOIN子句?多对多关系又如何?”
如果是一对多,则应在many端的表中插入所引用项目的ID。
一个人可以拥有多辆汽车,但一辆汽车只能由一个人拥有。
在关系数据库中,这是通过在person_id
实体内部创建car
来翻译的。通过这种方式,您可以通过简单的连接检索一个人拥有的所有汽车。
如果存在多对多关系,则需要在两个实体之间创建一个桥接表。
SELECT name, surname
FROM car JOIN person ON car.person_id = person.id
WHERE car.brand = 'mazda'
示例:
假设要求已更改,并且汽车可以由很多人拥有。
这是通过添加具有以下列的新桥表(例如person_car)来翻译的:
person_car_id
car_id
person_id
other_columns_that_could_map_the_relationship
(例如is_the_main_owner
)SELECT DISTINCT name, surname
FROM car JOIN person_car ON person_car.id_car = car.id JOIN person ON person_car.person_id = person.id
WHERE car.brand = 'mazda'
[如果在这里看到,您可以映射两个实体之间的多对多关系,并执行双重JOIN(通过桥表)以检索元素。