我有一个类似于以下的查询(删除了很多不相关的垃圾,因为它更像是一个概念问题):
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
这样做的最佳方式是什么?
答案 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
无论如何,你能描述一下你的桌子吗? (列举他们的字段)