mysql动态行
我想用动态行在MySQL上执行查询的每个人 想象一下: 表2.1.1.1.1类别mysql动态行,mysql,entity-attribute-value,Mysql,Entity Attribute Value,我想用动态行在MySQL上执行查询的每个人 想象一下: 表2.1.1.1.1类别 +----+------------+ | id | name | +----+------------+ | 1 | Home Phone | | 2 | Cell Phone | | 3 | Fax | +----+------------+ 桌上电话 +----+-----------+-------------------+--------------+ | id |
+----+------------+
| 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 |
+-----------+--------------+--------------+-------------+
好的,我需要一些“动态的”,因为在未来,桌面电话的类别可能会增加。这被称为“透视表”或“交叉表查询”。仅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`