MySql - 将三个表中的数据合并到一个表中

标签 mysql sql database-design

我有 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/

相关文章:

mysql - 从多个表中选择(大数据)

php - 下载脚本有些奇怪

PHP 文件上传(图片)

MySQL DATE_ADD() 函数

sql - HTML5 Web SQL DB - 最大表大小?

php - 奇怪的数据库设计,需要指导

php - docker-up 时出现 mysql 连接错误

mysql - SQL比较列中的整数,输出错误

sql - 负整数索引 : are they evil?

mysql - 何时使用 MongoDB