2011-03-01 28 views
1

我的一般问题是我想从左连接中选择所有列,而且我不需要知道连接两个表的ID 。我知道没有必要选择全部,但是因为你需要除ID之外的所有字段,为什么没有更简单的方法来:SELECT *除了“this column”,我觉得行动时间应该缩短相反的方式?SQL - 为什么没有办法SELECT SELECT,除了这一列

T1: 
aID, 
c1, 
c2, 
c3, 
c4 

t2: 
aID, 
c1, 
c2, 
c3, 
c4 

Select * from t1 left join t2 on t1.aid = t2.aid 

result: t1:aid, c1, c2, c3, c4, aid, c1, c2 ,c3 ,c4 

而不是选择我想要的每一列,我只想选择除“援助”以外的所有列。

+0

[Q]'为什么没有更简单的方法:SELECT *除了“this column”[A]因为没有真正的程序员/ dba需要它 – RichardTheKiwi

回答

0

我不太确定那是真的可能。您可能希望查看此实例中的动态查询,其中来自两个连接表的所有列都将包含在查询中,但外键除外。

您甚至可以考虑编写一个接受@ Table1,@ Table2,@PK,@FK参数的排序过程,然后根据提供的参数动态构建查询。

0

过早的优化是 根所有的邪恶(或至少大部分)在 编程。 - Donald E. Knuth

为什么你在乎id列是否被返回?

此外,这可能是SQL设计中的一个疏忽。

6

SELECT *是一个速记这对快速原型的查询是有用的,但强烈不建议在生产代码(的EXISTS表达外) - 如果有任何架构更改,那么无论在消费查询的结果会得到意想不到的列出现。同样,你所要求的表格也会有同样的问题。

一旦你适当的形成你的查询(得到连接正确等),你应该回到你的SELECT子句,并明确列出你实际上想要检索的列。检索比您需要更多的列(包括意外的新列)可能会导致SQL Server必须使用效率较低的计划,或检索消费者永远不会使用的大量数据。

0

出于同样的原因,SELECT *不是一个好主意。在查询中使用SELECT *可能会令人讨厌,最坏的情况是危险的。如果您正在查询的表或数据源发生更改,则可能会出现意外的行为。

0

听起来像你要找的是NATURAL JOIN

相关问题