У меня есть следующий оператор SQL
SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id
UNION
SELECT table1.col1 FROM table1 WHERE table1.col4 = null
Проблема в том, что этот синтаксис недействителен, потому что второй оператор не содержит того же количества столбцов, что и первый оператор.
Я не могу включить table2.col2 во второй оператор, потому что он мне не нужен.
Могу ли я включить второй столбец по умолчанию во второй оператор, чтобы я мог заставить этот запрос работать?


Да, просто используйте константу, например 1 или "".
SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id
UNION
SELECT table1.col1, '' as col2 FROM table1 WHERE table1.col4 = null
Может это то, что вы ищете? Вам не нужно извлекать значения из таблицы ... вы всегда можете создать их из воздуха. :)
SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id
UNION
SELECT table1.col1, 'whatever' FROM table1 WHERE table1.col4 is null
Просто используйте пустые ('') кавычки в списке столбцов для столбцов, которые вам не нужны во втором операторе SQL.
Обычно я использую NULL (который должен приводить к любому типу):
SELECT table1.col1, table2.col2 FROM table1, table2 WHERE table1.t_id = table2.t_id
UNION
SELECT table1.col1, NULL AS col2 FROM table1 WHERE table1.col4 = null
Вероятно, лучше всего использовать null для фиктивного столбца, чтобы он работал больше как внешнее соединение (если у вас нет особой необходимости, чтобы столбец имел определенное значение).
SELECT table1.col1, table2.col2
FROM table1, table2 WHERE table1.t_id = table2.t_id
UNION
SELECT table1.col1, null
FROM table1 WHERE table1.col4 = null
При объединении или объединении все количество столбцов должно совпадать. Вам нужно будет либо жестко закодировать значение, которое будет помещено в этот столбец, либо запросить представление каталога sys.columns и получить значение по умолчанию для столбца, в который вы вставляете, и использовать это значение там.
@ Джоэл - правда, но я не знал, что он хотел в колонке.