gpt4 book ai didi

mysql 动态行

转载 作者:行者123 更新时间:2023-11-29 14:43:21 25 4
gpt4 key购买 nike

每个人都想在 MySQL 上使用动态行执行查询。

想象一下:

桌面电话_类别

+----+------------+
| id | name |
+----+------------+
| 1 | Home Phone |
| 2 | Cell Phone |
| 3 | Fax |
+----+------------+

桌面电话

+----+-----------+-------------------+--------------+
| id | entity_id | phone_category_id | phone_number |
+----+-----------+-------------------+--------------+
| 1 | 1 | 1 | X19 XXX 2XX |
| 2 | 1 | 3 | X19 XXX 2XX |
| 3 | 2 | 1 | X18 XXX 4XX |
| 4 | 2 | 3 | X18 XXX 4XX |
+----+-----------+-------------------+--------------+

我想要以下输出:

+-----------+--------------+--------------+-------------+
| entity_id | Home Phone | Cell Phone | Fax |
+-----------+--------------+--------------+-------------+
| 1 | X19 XXX 2XX | | X19 XXX 2XX |
| 2 | X18 XXX 4XX | | X18 XXX 4XX |
+-----------+--------------+--------------+-------------+

好吧,我需要一些“动态”,因为 future 表phone_categories可能会增长。

最佳答案

这称为“数据透视表”或“交叉表查询”。仅 MySQL 无法动态地完成此操作。您始终需要提前知道列名称,因此,如果您使用编程/脚本语言进行输出,则可以使用它通过 for 循环动态构建 SQL 语句。已经确定了类别。

但是查询将如下所示:

SELECT
phones.entity_id,
CASE WHEN phones.phone_category_id = 1 THEN phones.phone_number ELSE NULL END AS `Home Phone`,
CASE WHEN phones.phone_category_id = 2 THEN phones.phone_number ELSE NULL END AS `Cell Phone`,
CASE WHEN phones.phone_category_id = 3 THEN phones.phone_number ELSE NULL END AS `Fax`
FROM phones

您尚未识别任何编程语言,因此这里有一些用于生成查询的伪代码:

categories = "SELECT id, name FROM phone_categories;"
foreach categories
sql_columns = sql_columns + " CASE WHEN phones.phone_category_id = " + categories.id + " THEN phones.phone_number ELSE NULL END AS `categories.name`

关于mysql 动态行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535386/

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