2013-11-20 4 views
0

Я пытаюсь понять код, написанный кем-то другим. Таблица closure имеет 3 столбца по названию ancestor, descendant и length.Можете ли вы перевести эту инструкцию SELECT

Запрос Я хотел бы помощь с:

INSERT INTO table1 (ancestor, descendant, length) 
SELECT a.ancestor, 12, a.length+1 
    FROM closure a 
    WHERE a.descendant=11; 

Обычно я бы ожидать, имена столбцов после SELECT заявления.

+0

Это действительно полное заявление? Похож на часть обхода иерархии; Я ожидаю увидеть такой запрос как часть более крупного рекурсивного запроса. –

ответ

6

Подбор ancestor, буквальный номер 12, а затем значение length плюс один. Он делает это для строк, где столбец descendant равен 11.

Нет ничего, что мешает вам выбирать литералы и делать арифметические операции в выборе.

Если Вы желаете, чтобы получить доступ к значениям по имени столбца в коде приложения, вы, вероятно, хотите, чтобы назвать эти два последних с помощью AS somename (например SELECT 12 as number, ...)

+0

Давайте позаботимся правильно. Во-первых, запрос идентифицирует все записи, в которых «потомок» равен «11». Это приводит к списку записей. Затем он берет эти записи и заменяет значение «потомок» на число «12», и он (эффективно) добавляет его к значению 'length'. Верный? (Затем он вставляет их в 'table1', но мой вопрос действительно касался' SELECT'.) – JDelage

+1

В принципе. Он не извлекает «потомок» из таблицы в «SELECT» или «заменяет» его. Он просто использует буквальное значение '12', указанное в предложении SELECT. Однако он извлекает значение для 'length' для этой строки и добавляет 1 к нему. И затем да, он вставляет обратно в таблицу. – bhamby

Смежные вопросы