Да, вы можете сделать это только с одним запросом и без самообъединений.Используйте аналитическую функцию по всей таблице, чтобы найти соответствующий символ:
Установка Oracle :
CREATE TABLE table_name ( key1, fkey1, "option", symbol ) AS
SELECT 1, 5, 'A', 1 FROM DUAL UNION ALL
SELECT 2, 6, 'B', 1 FROM DUAL UNION ALL
SELECT 3, 7, 'C', 1 FROM DUAL UNION ALL
SELECT 4, 8, 'D', 2 FROM DUAL;
Запрос :
SELECT *
FROM (
SELECT t.*,
MAX( CASE key1 WHEN 2 THEN symbol END ) OVER () AS symbol_to_match
FROM table_name t
)
WHERE symbol = symbol_to_match
Выход :
KEY1 | FKEY1 | option | SYMBOL | SYMBOL_TO_MATCH
---: | ----: | :----- | -----: | --------------:
1 | 5 | A | 1 | 1
2 | 6 | B | 1 | 1
3 | 7 | C | 1 | 1
дБ <> скрипка здесь