В моей базе данных есть плохо спроектированная таблица, которая содержит некоторую информацию, которую мне нужно извлечь. Supose У меня есть следующий запрос:Подзапрос с несколькими столбцами
SELECT
(SELECT I FROM X WHERE X.A = FOO AND X.B = KEY),
(SELECT J FROM X WHERE X.A = BAR AND X.B = KEY),
(SELECT K FROM X WHERE X.A = BAZ AND X.B = KEY)
Мне нужно развернуть запрос, чтобы выбрать другие поля. Моя первая мысль была такой:
SELECT
(SELECT I FROM X WHERE X.A = FOO AND X.B = KEY),
(SELECT J FROM X WHERE X.A = BAR AND X.B = KEY),
(SELECT K FROM X WHERE X.A = BAZ AND X.B = KEY)
(SELECT L, M, N FROM X WHERE X.A = QUX AND X.B = KEY)
Однако я получаю сообщение об ошибке о том, что подзапрос, который выбирает столбцы может только принести один столбец, если он не будет введен с EXISTS пункта. Я мог бы написать последний подзапрос как таковой:
(SELECT L, M, N FROM X AS OUTER
WHERE EXISTS
(SELECT ID FROM X WHERE X.A = QUX AND X.B = KEY AND X.ID = OUTER.ID)(
Не будет ли это решение излишне тяжелым? Есть ли другое решение?
РЕДАКТИРОВАТЬ:
мне нужно, чтобы извлечь информацию в одной строке. Я также должен упомянуть, что нет никакой гарантии, что каждый X.A присутствует (могут быть ключи, которые имеют только FOO, другие с BAR и QUX и т. Д.), Поэтому соединение невозможно.
EDIT: @Saharsh Шах просил некоторые образцы данных:
|X.B |X.A|X.I |X.J |X.K |X.L |X.M |X.N | |KEY1|FOO|ICONTENT| | | | | | |KEY1|BAR| |JCONTENT| | | | | |KEY1|BAZ| | |KCONTENT| | | | |KEY1|QUX| | | |LCONTENT|MCONTENT|NCONTENT| |KEY2|BAR| |JCONTENT| | | | | |KEY3|FOO|ICONTENT| | | | | | |KEY3|QUX| | | |LCONTENT|MCONTENT|NCONTENT|
и ожидаемый результат: для ключа 1:
X.I |X.J |X.K |X.L |X.M |X.N | ICONTENT|JCONTENT|KCONTENT|LCONTENT|MCONTENT|NCONTENT|
Для ключа 2:
X.I |X.J |X.K |X.L |X.M |X.N | |JCONTENT| | | | |
Для ключ 3:
X.I |X.J |X.K |X.L |X.M |X.N | ICONTENT| | |LCONTENT|MCONTENT|NCONTENT|
я редактировал запросы, чтобы исправить параметры. Первый столбец запросов должен быть X.A для всех подзапросов. –