这是我的表格,其中包含示例数据:
| attr_key | attr_value | element_id |<br>
| color | black | 1 |<br>
| color | red | 2 |<br>
| color | green | 3 |<br>
| power | 82 | 1 |<br>
| power | 150 | 2 |<br>
| power | 240 | 3 |<br>
| and so on ...
如何查询此表以得到如下结果:
| color | power | element_id |<br>
| black | 82 | 1 |<br>
| red | 150 | 2 |<br>
| green | 240 | 3 |
GROUP BY
不起作用,因为它仅对每个element_id采用第一个属性,而其他属性则丢失。
我必须创建一个视图吗?
将属性直接放入我的elements
表中,例如在JSON字段中?这些属性是非常可变的,因此每个元素可能有很多属性(超过20个),我不确定在必须查询和检查特定属性(全部或仅几个)时哪种解决方案会更好。
稍后我想使用elements
联接另一个表(element_id
)。
答案 0 :(得分:0)
这将满足您的需要(将“ test_table”的所有实例替换为表名):
SELECT
sub1.`color` AS `Color`,
sub2.`power` AS `Power`,
sub1.`element_id` AS `Element ID`
FROM
(SELECT element_id, attr_value AS `color` FROM test_table WHERE attr_key = 'color') AS sub1
INNER JOIN
(SELECT element_id, attr_value AS `power` FROM test_table WHERE attr_key = 'power') AS sub2
ON
sub1.element_id = sub2.element_id
我用来设置测试的代码:
DROP TABLE IF EXISTS test_table;
CREATE TABLE IF NOT EXISTS test_table(
element_id int,
attr_key varchar(40),
attr_value varchar(40)
);
INSERT INTO
test_table
(attr_key, attr_value, element_id)
VALUES
('color', 'black', 1),
('color', 'red', 2),
('color', 'green', 3),
('power', '82', 1),
('power', '150', 2),
('power', '240', 3);