我有一个名为field_values
的(Joomla)数据库表,内容在下面;
+----+----------+---------+---------+
| id | field_id | item_id | value |
+----+----------+---------+---------+
| 1 | 2 | 446 | Jones |
| 2 | 2 | 447 | Smith |
| 3 | 2 | 448 | Jenkins |
| 4 | 3 | 446 | Paul |
| 5 | 3 | 447 | Peter |
| 6 | 3 | 448 | Sally |
| 7 | 4 | 446 | London |
| 8 | 4 | 447 | Dublin |
| 9 | 4 | 448 | Paris |
+----+----------+---------+---------+
我只显示表中的9行,但是实际上我有数千行,因此成功查询需要考虑到这一点。
各栏说明;
fields
表,2
=姓氏,3
=姓氏,4
=位置)users
表)如何从上表中选择所有值,但显示如下:
+------------+-----------+----------+
| first_name | last_name | location |
+------------+-----------+----------+
| Paul | Jones | London |
| Peter | Smith | Dublin |
| Sally | Jenkins | Paris |
+------------+-----------+----------+
在上面想要的结果中,id
字段并不是必需的,我只是添加了此字段以强调每一行都是唯一的。
我不确定是否需要使用子查询或分组依据,也许两者都不用?
谢谢。
答案 0 :(得分:1)
数据透视查询应该在这里工作:
SELECT
MAX(CASE WHEN field_id = 3 THEN value END) AS first_name,
MAX(CASE WHEN field_id = 2 THEN value END) AS last_name,
MAX(CASE WHEN field_id = 4 THEN value END) AS location
FROM yourTable
GROUP BY
item_id
ORDER BY
item_id;
您当前的表结构是非规范化的键值存储,这是WordPress在某些表中使用的样式。
答案 1 :(得分:0)
您可以避免子查询和混乱。 您可以在同一张表中使用3次
select a.id, b.value firts_name, a.value last_name , c.value location
from field_values a
inner join field_values b on a.item_id = b.item_id and b.field_id = 3
inner join field_values bc on a.item_id = c.item_id and b.field_id = 4
where a.item_id = 2