2011-03-01 29 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

相關問題