gpt4 book ai didi

mysql - 转换 MySql 子查询

转载 作者:行者123 更新时间:2023-11-29 01:37:09 24 4
gpt4 key购买 nike

我想以一种特殊的方式连接 mysql 中的 2 个表。

这是我的 2 个表:

权利

<strong>right_id</strong> <strong>thumbnail</strong> <strong>enabled</strong>
1 img1.png 1
2 img2.png 1
3 img3.png 1

右弦

<strong>right_id</strong> <strong>language</strong> <strong>string_key </strong> <strong>string value</strong>
1 en short_header Right 1
1 de short_header Recht 1
1 de long_header Langer Text
1 en long_header Long Text
1 en content Bla Bla Bla
1 de content Bla Bla Bla

这对其他语言和所有权利也是如此。

是否可以创建一个查询,将所有权利按以下格式仅作为一行返回?

<strong>right_id</strong><strong>thumbnail</strong><strong>enabled</strong><strong>short_header_en</strong><strong>short_header_de</strong><strong>long_header_en</strong><strong>long_header_de</strong><strong>content_en</strong> <strong>content_de </strong>
1 img1.png 1 Right 1 Recht 1 Long Text Langer Text Bla Bla Bla Bla Bla Bla

我假设 mysql 对子查询有某种转换,但我什至不知道要寻找什么。

谢谢

最佳答案

这似乎是一个表格透视问题,不确定它是否是您真正想要的,但尝试一下。

SELECT
r.right_id, r.thumbnail, r.enabled,
MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = 'short_header_en' THEN string_value END) AS `short_header_en`,
MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = 'short_header_de' THEN string_value END) AS `short_header_de`,
MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = 'long_header_en' THEN string_value END) AS `long_header_en`,
MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = 'long_header_de' THEN string_value END) AS `long_header_de`,
MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = 'content_en' THEN string_value END) AS `content_en`,
MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = 'content_de' THEN string_value END) AS `content_de`
FROM rights r
INNER JOIN right_strings rs
ON r.right_id = rs.right_id
GROUP BY r.right_id

对于动态表透视:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN CONCAT(rs.string_key, '_', rs.`language`) = ''',
string_key, '_', `language`
''' THEN rs.string_value END) AS ',
string_key, '_', `language`
)
) INTO @sql
FROM right_strings;

SET @sql = CONCAT(
'SELECT r.right_id, r.thumbnail, r.enabled, ',
@sql,
' FROM rights r
INNER JOIN right_strings rs
ON r.right_id = rs.right_id
GROUP BY r.right_id;');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于mysql - 转换 MySql 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com