2017-07-14 73 views
2

表A如何从一个键值对表中选择数据

id,parentID, key, value 
1, 2, name, name1 
2, 2, age, 20 
3, 2, place, place1 

50, 7, name, namex 
51, 7, age, 20 
52, 7, place, place1 
........ 
101, 5, name, namez 
102, 5, age, 23 
103, 5, place, place2 

我需要得到具有波纹格式

parentid, name, age, place 
2, name1, 20, place1 
7, namex, 20, place1 

plave = PLACE1和年龄= 20的所有日期如何编写Mysql SQL查询请帮我

回答

0

在SELECT子句中,您在结果中指定了所需的列名,在FROM子句中,您指定了将要应用查询的表,以及在在哪里克劳SE你especify每一行必须满足的条件,以上结果:

SELECT parentid, name, age, place 
FROM tableA 
WHERE place="place1" AND age=20 

您可以检查this link以获取更多信息。

4

可以使用条件聚合,得到一个行的所有的的parentid的信息,然后使用where子句所要求的条件。

select * from (
select parentid 
,max(case when key='name' then value end) as name 
,max(case when key='age' then value end) as age 
,max(case when key='place' then value end) as place 
from tableA 
group by parentid 
) t 
where place='place1' and age=20 

这假定表中每个parentid每个键只有一行。

+0

这不是在工作MySQL的 –

1

你需要加入表三次 - 一次名字,一旦年龄和最后的位置。这将解除规范化表,然后是简单的查询,筛选你想要的标准:

SELECT a.parentId, a.name, b.age, c.place from 
myTable as a inner join myTable as b on a.parentId = b.parentId 
inner join myTable as c on a.parentId = c.parentId 
where a.id = 1 and b.id = 2 and c.id = 3 
and b.age = 20 and c.place = 'place1'; 
0

您需要使用大量的子查询这样

SELECT 
    parentId, 
    (SELECT aName.value FROM TableA aName WHERE aName.parentId = a1.parnetId and aName.KEY = 'name') as name, 
    value as age, 
    (SELECT aPlace.value FROM TableA aPlace WHERE aPlace.parentId = a1.parnetId and aPlace.KEY = 'place') as place 
FROM TableA a1 
WHERE 
    key = 'age' 
    AND 
    value = '20' 
    AND 
     EXISTS (SELECT NULL FROM TableA a2 
      WHERE 
       a1.parentId = a2.parentId 
       AND 
       a2.key = 'place' 
       AND 
       a2.value = 'place1') 
相关问题