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