sql >> データベース >  >> RDS >> Oracle

Oracleは、選択時に異なるケースに対して同じエイリアスを返します

    サブクエリがすでに正しい値を取得していて、同じ列で両方の「article」値を取得する方法を尋ねていると仮定すると、必要なのはサブクエリを2番目のwhenに移動することだけです。 最初のcase内を確認してください 独自の列としてではなく、式:

    SELECT
         tbl.parent,
         list.list_value,
         tbl.values_column,
         CASE
             WHEN list.list_value = 'Article' THEN tbl.values_column
             WHEN list.list_value = 'Paragraph' THEN (
                 SELECT
                     values_column
                 FROM
                     pro_table
                 WHERE
                     pro_table.id_pro_table = tbl.parent
             )
         END AS article,
         CASE
             WHEN list.list_value = 'Paragraph' THEN tbl.values_column
         END AS paragraph
     FROM
         pro_table tbl 
         LEFT JOIN list ON list.id_list = tbl.id_t_list
    

    サブクエリを同じテーブルへの左結合に置き換えて、結果を合体させることができます:

    SELECT
         tbl.parent,
         list.list_value,
         tbl.values_column,
         COALESCE (
             CASE
                 WHEN list.list_value = 'Article' THEN tbl.values_column
             END,
             tbl2.values_column
         ) AS article,
         CASE
             WHEN list.list_value = 'Paragraph' THEN tbl.values_column
         END AS paragraph
     FROM
         pro_table tbl 
         LEFT JOIN list ON list.id_list = tbl.id_t_list
         LEFT JOIN pro_table tbl2 ON tbl2.id_pro_table = tbl.parent
    

    ...しかし、それは階層についていくつかの仮定をしているので、おそらくリストタイプに基づいて結合を強化する必要があります。

    db <> fiddle 実際のIDがないため、表示したのと同じ6行の間に発明された関係があります。




    1. mysql経由でphpを実行しますか?

    2. MySQL8.0.22での非同期レプリケーションの自動フェイルオーバー

    3. Sqlplus oracle:bashでsqlコマンドを1行で実行するにはどうすればよいですか?

    4. ネストされたブロックは、PL / SQLプロシージャのパフォーマンスに影響を与えますか?