1

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

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

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

4

3 回答 3

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
于 2012-12-18T16:02:17.453 回答
1

从您的输出来看,在我看来您使用的是EAV 模型之类的东西,还是我弄错了?如果是这种情况,那么在 SQL 中执行它并不是一个好主意,最好按照@Najzero 的建议在应用程序层执行(在这种情况下,透视将不起作用)。

如果您在 SQL 中确实需要它,请查看@JW.'s answer,它会在这种情况下满足您的需求。但是,在大多数情况下,除了这个简单的查询(当您需要使用 EAV 并且无法进行适当的表模型时),它可能会表现不佳,导致数据不一致或根本不可能。最终,让事情保持简单可能是处理此类系统的一种“更明智”的方式。

于 2012-12-18T16:14:55.420 回答
0

我假设你想选择这样的东西:

SELECT o.bank_name, o_prop.bank_date

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

于 2012-12-18T16:00:21.960 回答