Выберите правильные столбцы из оператора JOIN - PullRequest
14 голосов
/ 05 апреля 2010

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

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

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

Ответы [ 3 ]

14 голосов
/ 05 апреля 2010

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

SELECT t1.*, t2.my_col FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID
6 голосов
/ 05 апреля 2010

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

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

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

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

0 голосов
/ 05 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...