Выберите правильные столбцы из оператора JOIN

У меня есть две таблицы: table1, table2. Таблица 1 имеет 10 столбцов, таблица 2 имеет 2 столбца.

SELECT * FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID

Я хочу выделить все столбцы из таблицы 1 и только 1 столбец из таблицы2. Возможно ли это сделать без перечисления всех столбцов из table1?

Ответы

Ответ 1

Да, вы можете сделать следующее:

SELECT t1.*, t2.my_col FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID

Ответ 2

Даже если вы можете сделать t1.*, t2.col1 вещь, я бы не рекомендовал ее в производственном коде.

Я бы никогда никогда не использовал SELECT * в производстве - почему?

  • вы говорите SQL Server, чтобы получить все столбцы - действительно ли вам нужно действительно?
  • не указывая имена столбцов, SQL Server должен сам это понять - он должен проконсультироваться со словарем данных, чтобы узнать, какие столбцы присутствуют, что немного снижает производительность.
  • Самое главное: вы не знаете, что получаете. Внезапно таблица меняется, добавляется еще один столбец или два. Если у вас есть какой-либо код, который зависит от, например, последовательность или количество столбцов в таблице без явной проверки на это, ваш код может заблокировать

Моя рекомендация для производственного кода: всегда (без исключений!) укажите именно те столбцы, которые вам действительно нужны - и даже если вам нужны все они, явно укажите это. Меньше сюрпризов, меньше ошибок для поиска, если что-либо изменится в базовой таблице.

Ответ 3

Используйте table1.* вместо всех столбцов таблицы1;)