我有 3 个表,用于存放部门、地区和警察局表的数据。表数据是相互依赖的
divisions
- districts
-- police_stations
表格格式为
divisions
id
name
districts
id
division_id
name
police_stations
id
division_id
district_id
name
我可以只设计一个表,其中包含具有当前表依赖性的所有表数据吗?如果可以的话,穿越过程会怎样?
最佳答案
要将多个表组合在一起,您应该使用 JOINS。这是比创建新表更好的数据库实践。
The INNER JOIN keyword selects all rows from both tables as long as there is a match between the columns in both tables.
SELECT *
FROM divisions divis
INNER JOIN districts dis
ON dis.division_id = divis.id
INNER JOIN police_stations pol
ON pol.district_id = dis.id
注意:显然 DIV
关键字是 mysql 中保留的,所以你必须使用其他东西来标识分区。
如果您坚持使用此数据创建新表,则可以使用CREATE TABLE AS
配方。
为了做到这一点,我们需要修改原始架构。新表不能有重复的名称,因此我们必须将原始表更改为全部具有唯一的列。
例如,name
变为 district_name
。
CREATE TABLE combined AS (
SELECT divis.id, divis.division_name, dis.district_name, pol.police_name
FROM divisions divis
LEFT JOIN districts dis
ON divis.id = dis.division_id
LEFT JOIN police_stations pol
ON pol.district_id = dis.id
);
这是一个 fiddle 来演示它
http://sqlfiddle.com/#!9/7ec3b/1/0
但这确实是糟糕的数据库设计。推荐我的第一个解决方案
关于MySql - 将三个表中的数据合并到一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502981/