来自内部联接表的"SELECT*"

dje*_*dot 2 sql sql-server inner-join

如何选择两个连接表的所有字段,而不与公共字段冲突?

假设我有两个表,Products并且Services.我想做一个这样的查询:

SELECT Products.*, Services.* 
FROM Products 
INNER JOIN Services ON Products.IdService = Services.IdService
Run Code Online (Sandbox Code Playgroud)

这个查询的问题是IdService会出现两次并导致一堆问题.

到目前为止,我发现的替代方案是区分Products除了IdService一个之外的每个字段.但是这样我每次添加新字段时都必须更新查询Products.

有一个更好的方法吗?

eri*_*len 13

你不应该在生产代码中使用SELECT*(好吧,几乎从不,但是可以很容易地计算出合理的时间).


Amy*_*y B 12

什么是最常见的SQL反模式?

你已经击中了反模式#1.

更好的方法是提供一个字段列表.获得快速字段列表的一种方法是

sp_help tablename
Run Code Online (Sandbox Code Playgroud)

如果你想从这个查询创建一个视图 - 使用select*会让你更麻烦.SQL Server在创建视图时捕获列列表.如果您编辑基础表并且不重新创建视图 - 您正在报名遇到麻烦(我有这种性质的生产火灾 - 视图是针对不同数据库中的表).