sql >> Databáze >  >> RDS >> Oracle

Oracle vrací stejný alias pro různé případy na select

Za předpokladu, že váš poddotaz již dostane správnou hodnotu zpět a vy se jen ptáte, jak získat obě hodnoty 'article' ve stejném sloupci, vše, co musíte udělat, je přesunout poddotaz do druhého when zkontrolujte v prvním case výraz, místo jako vlastní sloupec:

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

Můžete nahradit poddotaz levým spojením zpět do stejné tabulky a spojit výsledky:

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

... ale to vytváří určité předpoklady o hierarchii, takže pravděpodobně budete muset zpřísnit spojení podle typu seznamu.

db<>fiddle s vynalezenými vztahy mezi stejnými šesti řádky, které jste ukázali, protože nemáme skutečná ID.




  1. SQL - vyberte řádky, které mají stejnou hodnotu ve dvou sloupcích

  2. Interakce se 2 tabulkami:vložit, získat výsledek, vložit

  3. Existuje MySQL.. INSERT... ON DUPLICATE KEY SELECT?

  4. Datové tabulky spojující tabulky vyhledávají a objednávají uvízlé s codeigniter