【问题标题】:Join a same table using key and values to get data in one row使用键和值连接同一个表以获取一行中的数据
【发布时间】:2017-03-18 04:46:59
【问题描述】:

这是我的表结构,

我希望将同一张表与其键值组合起来,例如 prop_key ='color'

id    journal_id     property     prop_key       old_value                        value
405   252             attr         color         1                                 0
372   252             attr       updated_at      2017-03-18 03:43:34 UTC     2017-03-18 03:43:34 UTC
402   252             attr       sprint_id       5                                 0

我想要这种形式的结果。

id           color       sprint_id           start_date
372           2           5               2017-03-18 03:43:34 UTC  

我尝试以下方法

select t.id,
       max(case when a.prop_key='color' then a.value end) attr_val1,
       max(case when a.prop_key='sprint_id' then a.value end) attr_val2,
       max(case when a.prop_key='updated_at' then a.value end) attr_val3
from journal_details t
left join journal_details a on t.id = a.id
where t.journal_id=242 
group by t.id

Select 
    journal_details.id,  
    a1.value as color,
    a2.value as sprint_id,
    a3.value as start_date
from journal_details
    left join (select * from journal_details where prop_key='color') a1 on journal_details.id=a1.id
    left join (select * from journal_details where prop_key='sprint_id') a2 on journal_details.id=a2.id
    left join (select * from journal_details where prop_key='start_date') a3 on journal_details.id=a3.id
    where journal_details.journal_id=242

但我没有得到满意的结果。

【问题讨论】:

    标签: mysql join mysql-error-1064


    【解决方案1】:

    您不需要自我加入。

    试试这个:

    select min(id),
        max(case when prop_key = 'color' then value end) attr_val1,
        max(case when prop_key = 'sprint_id' then value end) attr_val2,
        max(case when prop_key = 'updated_at' then value end) attr_val3
    from journal_details
    where journal_id = 242
    

    【讨论】:

    • 但它给出了 5 行的不同值,例如 prntscr.com/eldkp5,但我想要所有结果的一行
    • @Navjot - 你想在 journal_id 列上分组吗?分钟(id)也许?结果中 id 列的值是多少?在您的问题中,您在预期输出中显示了 372,但它来自哪里?你输入的数据没有
    • @NavjotSingh - 更新了答案。立即尝试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多