2012-02-17 47 views

回答

2
select a, c, b from table 

*表示您希望獲取所有字段的默認順序。

+0

確定我做出這樣您鍵入*,但我喜歡複製56列,那麼有沒有其他辦法? :D – 2012-02-17 12:50:33

+0

你需要什麼56列?要在屏幕上看到這些內容,或者以編程方式在其他地方使用這些內容?在後一種情況下,您應該按列名引用這些字段,而不要依賴它們的位置。 – penartur 2012-02-17 12:52:53

+0

ok rl true是我需要一個更好的性生活的列:D – 2012-02-17 13:02:05

3
Select a, c, b 
From mytable 

這是你唯一的選擇,在我看來,你應該通過名稱,而不是總是選擇列*,這樣你就不會得到任何驚喜,當模式變化(新列添加例如)

+0

但如果我有56列?我只需要列51之前的列號52 * - 如何做到這一點? :D – 2012-02-17 12:45:01

+0

同意@Bassam Mehanni,如果可以的話,通常最好避免在生產SQL中使用*。如果有人更改模式,它會讓你更安全 – Liath 2012-02-17 12:50:44

+0

你仍然必須按名稱選擇它們:) – 2012-02-17 12:51:26

0

創建表後,您無法重新排列表中的列 - 只能追加到最後。如上所述,您可以選擇查詢中的順序。

您唯一的選擇是腳本表,刪除表並手動更新腳本中的順序。你顯然會面臨失去數據和FKs這樣做的問題。

0

我不完全理解你的問題。如果你是說

SELECT * 
    FROM MyView 
EXCEPT 
SELECT * 
    FROM MyTable; 

失敗,因爲視圖和表具有不同的列排序,然後使用

SELECT * 
    FROM MyView 
EXCEPT CORRESPONDING 
SELECT * 
    FROM MyTable; 

,除非你選擇的SQL產品不支持在這種情況下,你要麼有將所有列寫出(推薦)或將列的序數位置更改爲其中一個表(不推薦)。

0

您可以創建該表格的視圖,將列按所需順序排列。例如:

CREATE VIEW viewMyView 
as 
SELECT 
Column5, 
Column1, 
Column2, 
Column3, 
Column6, 
Column7, 
Column8, 
Column4 
FROM myTable

然後你可以從viewMyView

做選擇*