Более эффективно ВЫБРАТЬ константы против использования ЗНАЧЕНИЙ при ВСТАВКЕ строки с постоянными значениями? - PullRequest
0 голосов
/ 03 апреля 2019

Какой из следующих запросов является более эффективным и более идиоматичным способом вставки строки с некоторыми постоянными значениями?

INSERT INTO example_table (col1, col2, col3)
SELECT 123, other_col, 'value' FROM other_table WHERE some_id = 999;

или

INSERT INTO example_table (col1, col2, col3)
VALUES (123,
       (SELECT other_col FROM other_table WHERE some_id = 999),
       'value');

1 Ответ

1 голос
/ 03 апреля 2019

они имеют разную семантику, если не существует единственной строки, соответствующей следующему запросу

SELECT other_col FROM other_table WHERE some_id = 999

, поэтому выберите ту, которая дает необходимую семантику

  • Если вышезапрос возвращает 0 строк, хотите ли вы (а) не вставлять строки или (б) строку с NULL?
  • Если вышеуказанный запрос возвращает более одной строки, хотите ли вы (а), чтобыколичество строк для вставки или (b) ошибка времени выполнения?

Если вы ответили (a) на оба вышеупомянутых вопроса, выберите первый.Если вы ответили (б), выберите второй.

...