我尝试从多个表插入到一个表中。
这是我的 table
provinces table :
id , name
regencies table :
id , province_id , name
districts table :
id , regency_id , name
villages table :
id , district_id , name
我想插入具有以下结构的表:
tb_all
id , id_villages , villages_name ,
id_districts , districts_name ,
id_regency , regency_name ,
id_provinces , provinces_name
我真的是 mysql 命令的新手。
这是我的查询:
INSERT INTO tb_all (
id_villages,
villages_name,
id_districts,
districts_name,
id_regency,
regency_name,
id_provinces,
provinces_name)
SELECT v.id,
v.name,
d.id,
d.name,
r.id,
r.name,
p.id,
p.name
FROM villages AS v,
districts AS d,
regencies AS r,
provinces AS p
WHERE p.id = '73'
但是我收到了这个错误:
**Error : Lock wait timeout exceeded**
我很感谢您的回答。谢谢。
编辑2: 另一个问题是当我运行此查询时,我的磁盘几乎已满:(
最佳答案
您应该连接将外键链接到主键的表,否则您将生成 Cartesian product ,这不会是您想要的,并且可能会使您的数据库引擎运行到极限。
正如您在评论中所写,您确实将村庄记录过滤为 18,000 条记录。但您不会过滤所有其他表,其中地区可能有超过 5,000 条记录,地区可能有 200 条记录,省可能有 50 条记录.因此,您将得到乘法结果集:18,000 x 5,000 x 200 x 50 = 9000 亿条记录!
这是一个建议的查询。我建议您首先运行以 SELECT 开头的部分,看看是否生成正确的记录。然后,当一切正常时,运行 INSERT
:
INSERT INTO tb_all (
id_villages,
villages_name,
id_districts,
districts_name,
id_regency,
regency_name,
id_provinces,
provinces_name)
SELECT v.id,
v.name,
d.id,
d.name,
r.id,
r.name,
p.id,
p.name
FROM provinces AS p
INNER JOIN regencies AS r
ON r.province_id = p.id
INNER JOIN districts AS d
ON d.regency_id = r.id
INNER JOIN villages AS v
ON v.district_id = d.id
WHERE p.id = 73
关于MySQL从多个表中插入一个表并按id过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074005/