Плюс знак в предложении select SQL

Я работаю над старым SQL, написанным для Oracle. Есть часть предложения select, которую я не понимаю, даже после поиска в Google и проверки вопросов, связанных со знаком + с ключевыми словами Oracle и SQL.

Я проверил ответ на аналогичный вопрос для предложения where здесь, а также нашел документы Oracle для соединения, но это не имеет смысла для предложения select.

Учитывая SQL ниже, какова цель знака плюс.

select '01,'|| 
lpad( 
   (select nvl(count(*), 0) from table1)
   +
   (select nvl(count(*), 0) from table2)
   +
   (select nvl(count(*), 0) from table3)
,9,'0')
from DUAL

Образец вывода

01,000011111

Из примера вывода sql кажется, что он предназначен для объединения результата, но я хочу быть уверенным.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
676
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

+ не для конкатенации строк. Это для доп. Кроме того, count() не возвращает значения NULL, поэтому nvl() не требуется.

Это должно быть эквивалентно:

select ('01,' || 
        lpad( ((select count(*) from table1) +
               (select count(*) from table2) +
               (select count(*) from table3)
              ), 9, '0'
            )
        )
from DUAL

Не могли бы вы также сообщить мне, является ли этот оператор + в предложении select специфичным для оракула?

Rov 29.05.2019 17:34

@Rovshen: оператор + является стандартным оператором в SQL для добавления чисел. Почему вы думаете, что это будет что-то "особенное". Какой оператор, по вашему мнению, будет отвечать за добавление номеров?

a_horse_with_no_name 29.05.2019 18:42

Хороший вопрос, мне не нужно было делать арифметику в операторе выбора. Спасибо за подтверждение!

Rov 29.05.2019 20:03

Я думаю, что он запутался с нотацией внешнего соединения, отличной от ISO, которая необязательно используется Oracle, которая также использует оператор +

James 29.05.2019 20:40

Ровшен, согласен с Гордоном. Код объединяет «01» с отформатированной суммой счетчиков из трех таблиц. LPAD равен нулю, заполняя суммарное числовое значение до 9 цифр. "||" является символом конкатенации в Oracle, хотя есть и функция конкатенации. Он используется редко.

Спасибо, Марк, спасибо за объяснение остальной части sql, мне пришлось искать LPAD.

Rov 29.05.2019 22:09

Другие вопросы по теме

Похожие вопросы

Как суммировать сумму для каждого пользователя?
Функция PostgreSQL с именами таблиц и столбцов в качестве параметров и будет возвращать минимум и максимум этого столбца (любого типа) в виде массива?
Oracle SQL — использование CASE WHEN для выбора правильного поля даты
Как получить набор результатов из динамического SQL-запроса на основе выбора в Pentaho-Kettle?
Как написать нединамический SQLQuery, чтобы он возвращал только те записи, которые соответствуют нескольким предложениям EXISTS?
Использование операторов case в качестве опорной точки — DB2 SQL
Удалить символ из динамической строки
Возникли проблемы с построением правильного синтаксиса запроса Linq в c#.net для соединения после соединения
Объединение двух столбцов таблицы и возврат их в виде одного столбца, разделенного символом
Получить количество строк для каждой объединенной таблицы для каждой строки в основной таблице