首页 > 解决方案 > MySQL转置多表查询

问题描述

我正在尝试执行以下操作:

我有两个不同的表:

表_a

日期 ID 字段名_1 字段名_2 单元1 Percntg_1 单元2 Percntg_2
01-01-2021 1 约翰·多伊 迈克高 3 0 0 0.62
05-01-2021 2 埃里克 塔尼亚史蒂文 0 0 0 0.32
2021 年 12 月 2 日 3 迈克高 哈罗德 0 0.95 0 0.82
18-02-2021 4 丽兹 昆汀 2 0.51 7 0.98

表_b

ID 数量 价格 产品
1 500 250.5 4
2 150 600 2
3 50 720 3
4 600 350 4

我想得到的是这个:

日期 ID 字段名 单元 百分比 数量 价格 产品
01-01-2021 1 约翰·多伊 3 0 500 250.5 4
01-01-2021 1 迈克高 0 0.62 500 250.5 4
05-01-2021 2 埃里克 0 0 150 600 2
05-01-2021 2 塔尼亚史蒂文 0 0.22 150 600 2
2021 年 12 月 2 日 3 迈克高 0 0.95 50 720 3
2021 年 12 月 2 日 3 哈罗德 0 0.82 50 720 3
18-02-2021 4 丽兹 2 0.51 600 350 4
18-02-2021 4 昆汀 7 0.98 600 350 4

先感谢您

标签: mysqlsql

解决方案


首先你需要规范化table_a,然后它是一个简单的加入table_b

SELECT  ​Date,NormalData.ID,Fieldname,Unit,Percntg,Quantity,Price,Product
​FROM (
    SELECT Date, ID, FieldName_1 AS FieldName, Unit_1 as Unit, percntg_1 AS Percntg
    FROM table_a
    UNION ALL
    SELECT Date, ID, FieldName_2 AS FieldName, Unit_2 as Unit, percntg_2 AS Percntg
) NormalData
LEFT INNER JOIN table_b ON NormalData.Unit = table_b.ID

请注意子查询如何使用联合,我们只需选择各个字段。

注意:我还没有在 MySQL 上测试过这种语法,但希望它能为您指明正确的方向


推荐阅读