Почему этот оператор объединяет RowID из таблицы и фиктивной таблицы? - PullRequest
1 голос
/ 22 марта 2019

Я работаю над возвратом приложения из Camel и myBatis в Spring boot и Jooq.

Существует очень странный SQL-оператор, который вложен в функцию использования нашего оператора слияния. Я не понимаю цели этого заявления, кто бы его ни написал, его больше нет в компании.

Внутри части использования слияния, она по сути равна

Select A, B, C, D FROM (
    Select ROWID as RID, A, B, C, D FROM TableA TA WHERE A = var
    UNION ALL
    Select ROWID, null, null, null, null FROM dual
WHERE ROWID >= 1 

ROWID не используется ни в одном из операторов match, поэтому причина, по которой он здесь, не имеет никакого смысла для меня. Хотя для начала я не очень разбираюсь в утверждениях слияния.

Редактировать: Условие использования On должно совпадать с тем, что A равно var, так как var - это переменная, которая передается через функцию, запускающую sql. В основном это просто ON A = var

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Возможно, автор хотел гарантировать, что запрос вернет хотя бы одну строку.(или ровно одна строка)

Если

Select ROWID as RID, A, B, C, D FROM TableA TA WHERE A = var

ничего не возвращает (ноль строк, ничего не найдено), то UNION ALL добавит строку NULL и будет возвращена.

Я не знаком с Oracle, поэтому я не совсем уверен, что достигает WHERE ROWID >= 1.Может быть, это гарантирует, что в результирующем наборе всегда будет ровно одна строка.

0 голосов
/ 22 марта 2019

RowID используется в последней строке. (ГДЕ ROWID> = 1).

Чтобы заставить UNION ALL работать, количество столбцов должно быть одинаковым.

По вашему вопросу, это зависит от логики программы после получения запроса. Поскольку все, что мы можем видеть здесь, две таблицы слияния.

Например, TableA имеет ROWID 1,2,3, а у «двойной» таблицы ROWID 1,2,3. Результат (объединенная таблица) покажет 1,1,2,2,3,3.

Более важно понять, как программа обрабатывает результат, так как вы можете узнать, почему старый оператор выполняет UNION ALL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...