如何编写SQL查询,基于关联条件将两表数据插入第三表指定列?
解决方案
可以通过多表关联查询实现需求,核心是利用Table_Categories的层级结构(品牌→车型→世代)匹配Table_one的对应字段,最终将结果插入Table_two。
SQL 语句
INSERT INTO Table_two (name, parent) SELECT t1.engine, gen.id FROM Table_one t1 INNER JOIN Table_Categories brand ON brand.name = t1.brand AND brand.parent = 1 INNER JOIN Table_Categories model ON model.name = t1.model AND model.parent = brand.id INNER JOIN Table_Categories gen ON gen.name = CAST(t1.generation AS VARCHAR) AND gen.parent = model.id WHERE t1.engine NOT IN (SELECT name FROM Table_two);
语句说明
- 三次
INNER JOIN依次匹配层级关系:- 匹配品牌:找到
Table_Categories中parent=1(顶级分类)且名称与Table_one.brand一致的记录,获取品牌ID - 匹配车型:基于品牌ID,找到对应车型的分类记录,获取车型ID
- 匹配世代:基于车型ID,找到对应世代(
Table_one.generation)的分类记录,其ID就是要插入的parent值
- 匹配品牌:找到
CAST(t1.generation AS VARCHAR):统一数值类型的generation与字符串类型的Table_Categories.name,确保匹配有效WHERE子句:避免插入Table_two中已存在的engine值(比如现有数据中的ph25)
内容的提问来源于stack exchange,提问作者Serj
相关产品推荐
相关产品推荐

