サブクエリがすでに正しい値を取得していて、同じ列で両方の「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行の間に発明された関係があります。