mysql - 基于 mysql 上映射表的列名

标签 mysql sql mapping

我对 mysql 很陌生。我有 2 张 table 。

表 1:product_details

manufacturerID| sku | image1                   | image2                   | image3
--------------------------------------------------------------------------------------------------
     123      |  1  | image1-sku1-filename.jpg | image2-sku1-filename.jpg | image3-sku1-filename.jpg    
     123      |  2  | image1-sku2-filename.jpg | image2-sku2-filename.jpg | image3-sku2-filename.jpg    
     123      |  3  | image1-sku3-filename.jpg | image2-sku3-filename.jpg | image3-sku3-filename.jpg
     456      | 10  | image1-sku10-filename.jpg| image2-sku10-filename.jpg| image3-sku10-filename.jpg
     456      | 20  | image1-sku20-filename.jpg| image2-sku20-filename.jpg| image3-sku20-filename.jpg

表 2:图像映射

manufacturerID | image_column | image_type
-------------------------------------------
    123        | image3       | master
    123        | image1       | extra
    123        | image2       | extra
    456        | image3       | master

我需要一个 SELECT 查询,它将所有产品 (sku) 与每个 manufacturerID 和每个 sku 的产品图像(将替换表 2 中的图像列名称)映射起来。

表 3:产品图片

manufacturerID | sku | product_image            | image_type
--------------------------------------------------------------
    123        |  1  | image3-sku1-filename.jpg | master
    123        |  1  | image1-sku1-filename.jpg | extra
    123        |  1  | image2-sku1-filename.jpg | extra
    123        |  2  | image3-sku2-filename.jpg | master
    123        |  2  | image1-sku2-filename.jpg | extra
    123        |  2  | image2-sku2-filename.jpg | extra
    123        |  3  | image3-sku3-filename.jpg | master
    123        |  3  | image1-sku3-filename.jpg | extra
    123        |  3  | image2-sku3-filename.jpg | extra
    456        | 10  | image3-sku10-filename.jpg| master    
    456        | 20  | image3-sku20-filename.jpg| master

最佳答案

以下内容适用于您的数据:

SELECT pd.manufacturerID, sku, 
       CASE WHEN im.image_column = 'image1' THEN pd.image1 
            WHEN im.image_column = 'image2' THEN pd.image2
            WHEN im.image_column = 'image3' THEN pd.image3 
            END AS prod_image, im.image_type
FROM product_details pd
JOIN image_mapping im
ON pd.manufacturerID = im.manufacturerID;

SQLFiddle:http://sqlfiddle.com/#!9/76fc1/3/0

关于mysql - 基于 mysql 上映射表的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229097/

相关文章:

mysql - 单表 9 GB 数据库是好的设计吗?

mysql - 手动删除表后无法从数据库中删除迁移条目(laravel)

sql - 当存在 NULL 时,性能选择行与另一个表中的条目不匹配

java - JPA映射文件教程

java - 使用 Dozer 映射值对象

MySQL - 不同结果显示每组最新记录

mysql - bash: 从 mysql 查询中输出\n\t 个字符

java - 使用 Spring Data 按日期排序 ASC

sql - 通过 Excel 2016 上的 ODBC 连接到 PostgreSQL 数据库

powershell - 无法在Powershell远程 session 中访问UNC路径