gbu*_*m89 0 mysql sql database database-design metadata
我有两个MySQL数据库表:
房车
-----------------------
| id | status | name |
-----------------------
| 1 | active | mh 1 |
| 2 | active | mh 2 |
-----------------------
Run Code Online (Sandbox Code Playgroud)
motorhome_meta
----------------------------------------------
| id | motorhome_id | meta_key | meta_value |
----------------------------------------------
| 1 | 1 | size | large |
| 2 | 1 | fuel | petrol |
| 3 | 2 | size | small |
| 4 | 2 | fuel | petrol |
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我需要的是一个查询,它允许我从motorhome表中选择一行,使用表中的值motorhome_meta.或者换句话说,如果我在motorhome表中选择
id为1的行.
----------------------------------------
| id | status | name | size | fuel |
----------------------------------------
| 1 | active | mh 1 | large | petrol |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我可能需要对任一表使用where语句,例如WHERE motorhome.status='active'或WHERE motorhome_meta.meta_key='size'.
您可以使用带有a的聚合函数CASE来创建数据行中的列:
select m.id,
m.status,
m.name,
max(case when h.meta_key= 'size' then h.meta_value end) size,
max(case when h.meta_key= 'fuel' then h.meta_value end) fuel
from motorhome m
inner join motorhome_meta h
on m.id = h.motorhome_id
-- where m.id = 1
group by m.id, m.status, m.name
Run Code Online (Sandbox Code Playgroud)
请参阅SQL Fiddle with Demo.这给出了结果:
| ID | STATUS | NAME | SIZE | FUEL |
---------------------------------------
| 1 | active | mh 1 | large | petrol |
| 2 | active | mh 2 | small | petrol |
Run Code Online (Sandbox Code Playgroud)
如果组合有UNIQUE约束,您也可以使用此变体(motorhome_id, meta_key):
select m.id,
m.status,
m.name,
h1.meta_value size,
h2.meta_value fuel
from motorhome m
left join motorhome_meta h1 -- or: inner join
on m.id = h1.motorhome_id -- depending on your need (or not)
and h1.meta_key = 'size' -- to show motorhomes
left join motorhome_meta h2 -- that have only 'fuel'
on m.id = h2.motorhome_id -- or only 'size'
and h2.meta_key = 'fuel' ;
Run Code Online (Sandbox Code Playgroud)
请参阅:SQL-Fiddle-2
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |