Выберите другой столбец соответствующей записи - Oracle SQL - PullRequest
0 голосов
/ 05 мая 2019

У меня есть этот запрос:

SELECT
    t1.*,
            (
                SELECT
                    MIN(t2.e_nm)
                FROM
                    table2 t2
                WHERE
                    t2.c_type = t1.c_type
                    AND t2.h_level = t1.h_level
                    AND t2.loop = t1.loop
                    AND t2.e_id = t1.e_id
                HAVING
                    COUNT(*) = 1
            ) AS e_nm
        FROM
            table1 t1
        ORDER BY
            t1.f_name,
            t1.line_num;

Когда e_nm выбирается из таблицы2 в качестве второго параметра, я также хочу получить другой столбец совпадающей записи - seq_nm из таблицы 1.

Как я могу сделать это в приведенном выше запросе?

1 Ответ

1 голос
/ 05 мая 2019

Если count(*) = 1, то вы можете использовать join с агрегацией

SELECT t1.*, t2.e_nm, t2.x
FROM table1 t1 LEFT JOIN
     (SELECT t2.c_type, t2.h_level, t2.loop, t2.e_id,
             MIN(t2.e_nm) as e_nm, MIN(x) as x
      FROM table2 t2
      GROUP BY t2.c_type, t2.h_level, t2.loop, t2.e_id
      HAVING COUNT(*) = 1
     ) t2
     ON t2.c_type = t1.c_type AND
        t2.h_level = t1.h_level AND
        t2.loop = t1.loop AND
        t2.e_id = t1.e_id
ORDER BY t1.f_name, t1.line_num;

Это работает, потому что у вас есть COUNT(*) = 1, поэтому соответствует только одна строка. Если вы этого не сделаете, вы все равно можете использовать KEEP:

MIN(x) KEEP (DENSE_RANK FIRST ORDER B t2.e_num ASC) as x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...