将多个表的行转换为列的MySQL查询
P粉882357979
P粉882357979 2023-08-13 16:02:22
0
1
497
<p>我需要向您请教关于从3个表中进行MySQL select查询的问题。</p> <p>我有3个类似的表:</p> <p><strong>table_1</strong></p> <pre class="brush:php;toolbar:false;">menu_id | menu_name 1 | 菜单1 2 | 菜单2</pre> <p><strong>table_2</strong></p> <pre class="brush:php;toolbar:false;">item_id | menu_id | item_name 1 | 1 | 项目1 2 | 1 | 项目2 3 | 2 | 项目3 4 | 2 | 项目4</pre> <p><strong>table_3</strong></p> <pre class="brush:php;toolbar:false;">price_id | item_id | currency_code | price 1 | 1 | EUR | 3.65 2 | 1 | USD | 3.45 3 | 2 | EUR | 9.00 4 | 4 | LEV | 4.85 5 | 4 | RON | 9.60</pre> <p>我需要进行如下的输出SELECT:</p> <pre class="brush:php;toolbar:false;">item_id | item_name | menu_id | menu_name | p_EUR | p_USD | p_GBP | p_RON | p_LEV 1 | 项目1 | 1 | 菜单1 | 3.65 | 3.45 | 0 | 0 | 0 2 | 项目2 | 1 | 菜单1 | 9.00 | 0 | 0 | 0 | 0 3 | 项目3 | 2 | 菜单2 | 0 | 0 | 0 | 0 | 0 4 | 项目4 | 2 | 菜单2 | 0 | 0 | 0 | 9.60 | 4.85</pre> <p>我希望用table_3的行填充查询的列(p_EUR,p_USD等)。如果没有匹配的记录,返回0或NULL。 表通过<code>table_1.menu_id=table_2.menu_id</code>和<code>table_2.item_id=table_3.item_id</code>进行连接。</p>
P粉882357979
P粉882357979

全部回复(1)
P粉476046165

您可以使用case when

SELECT
t2.item_id,
t2.item_name,
t2.menu_id,
t1.menu_name,
 MAX(CASE WHEN t3.currency_code = 'EUR' THEN t3.price END) AS p_EUR,
 MAX(CASE WHEN t3.currency_code = 'USD' THEN t3.price END) AS p_USD,
 MAX(CASE WHEN t3.currency_code = 'GBP' THEN t3.price END) AS p_GBP,
 MAX(CASE WHEN t3.currency_code = 'RON' THEN t3.price END) AS p_RON,
 MAX(CASE WHEN t3.currency_code = 'LEV' THEN t3.price END) AS p_LEV
FROM table_2 AS t2
JOIN table_1 AS t1 ON t2.menu_id = t1.menu_id
LEFT JOIN table_3 AS t3 ON t2.item_id = t3.item_id
GROUP BY t2.item_id, t2.item_name, t2.menu_id, t1.menu_name;

如果您需要将null转换为0,可以使用COALESCE,如下所示 COALESCE(MAX(CASE WHEN t3.currency_code = 'LEV' THEN t3.price END), 0) AS p_LEV

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!