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。の回答を確認してください。この場合、必要な処理が実行されます。ただし、この単純なクエリ以外のほとんどのシナリオ(EAVを使用する必要があり、適切なテーブルモデルを実行できない場合)では、パフォーマンスが低下したり、データの不整合が発生したり、まったく不可能になったりする可能性があります。物事をシンプルに保つことは、最終的にはそのようなシステムに対処するための「正気の」方法かもしれません。

于 2012-12-18T16:14:55.420 に答える
0

私はあなたがそのようなものを選択したいと思います:

SELECT o.bank_name, o_prop.bank_date

とにかく、あなたはあなたのテーブルを説明できますか?(フィールドを列挙します)

于 2012-12-18T16:00:21.960 に答える