在MySQL中映射值?

时间:2012-12-18 15:55:22

标签: mysql union

我有一个类似于以下的查询(删除了很​​多不相关的垃圾,因为它更像是一个概念问题):

SELECT o_prop.*
FROM o
LEFT JOIN o_prop
ON o_prop.id = o.id

输出看起来像这样:

name      | value
bank_name | My Bank
bank_date | 12-12-12
bank_name | My Bank2
bank_date | 13-12-12

但我需要以下输出:

bank_name | bank_date
My Bank   | 12-12-12
My Bank2  | 13-12-12

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

SELECT  MAX(CASE WHEN name = 'bank_name' THEN p.value ELSE NULL END) bank_name,
        MAX(CASE WHEN name = 'bank_date' THEN p.value ELSE NULL END) bank_date
FROM    o
        LEFT JOIN o_oprop p
            ON o.id = p.id
GROUP BY p.id

答案 1 :(得分:1)

从你的输出中,我觉得你在使用类似EAV model的东西,或者我错了?如果是这种情况,那么在SQL中执行它并不是一个好主意,最好在应用层中按照@Najzero的建议(在这种情况下,旋转不起作用)。

如果确实在SQL中需要它,那么请检查@JW.'s answer,在这种情况下它会执行您需要的操作。但是,在除了这个简单查询之外的大多数情况下(当您需要使用EAV并且无法执行正确的表模型时),它可能表现不佳,导致数据不一致或根本不可能。保持简单可能是最终处理此类系统的“更健全”的方式。

答案 2 :(得分:0)

我假设你想选择类似的东西:

SELECT o.bank_name, o_prop.bank_date

无论如何,你能描述一下你的桌子吗? (列举他们的字段)