从JOIN语句中选择适当的列

Ale*_*alt 15 sql t-sql sql-server

我有两个表:table1,table2.Table1有10列,table2有2列.

SELECT * FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID
Run Code Online (Sandbox Code Playgroud)

我想从table1中选择所有列,从table2中只选择1列.是否可以在不枚举table1中的所有列的情况下执行此操作?

Dan*_*llo 15

是的,您可以执行以下操作:

SELECT t1.*, t2.my_col FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 7

即使你可以做到这t1.*, t2.col1一点,我也不会在生产代码中推荐它.

永远不会SELECT *在生产中使用- 为什么?

  • 你告诉SQL Server获取所有列 - 你真的,真的需要所有列吗?
  • 通过不指定列名,SQL Server必须自己解决这个问题 - 它必须查阅数据字典以找出哪些列存在,这会花费一点点性能
  • 最重要的是:你不知道你得到了什么.突然,表格发生了变化,又增加了一两列.如果您有任何代码依赖于例如表中的序列或列数而没有明确检查,您的代码可以制动

我对生产代码的建议:总是(没有例外!)确切地指定你真正需要的那些列 - 即使你需要所有这些列,也要明确拼写出来.如果基础表中发生任何变化,那么就会减少意外,减少寻找的错误.