簡體   English   中英

如何從鍵值對表中選擇數據

[英]How to select data from a key value pair table

表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

我需要以波紋管格式獲得plave = place1和age = 20的所有日期

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

如何編寫Mysql SQL查詢請幫幫我

您可以使用條件聚合將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只有一個鍵。

你需要加入這個表三次 - 一次是名字,一次是年齡,最后一次是這個地方。 這將對您的表進行反規范化,然后通過簡單的查詢來過濾您想要的條件:

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';

在SELECT子句中,您可以在結果中指定所需的列名,在FROM子句中,您可以指定要將查詢應用於的表,在WHERE子句中,您可以指定每行必須滿足的條件結果如下:

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

您可以查看此鏈接以獲取更多信息。

你需要像這樣使用很多子查詢

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM