2009-09-19 79 views
1

如何選擇行並返回所有列,而不是指定單個列名?MySQL SELECT語句可以在不指定列名的情況下工作嗎?

我也可以只返回符合特定條件的列嗎? (例如,以「_」開頭的col名稱)

+0

還是應該使用存儲過程?不過,我更喜歡SQL語句。 – 2009-09-19 08:56:11

+1

SELECT * FROM table? – Aziz 2009-09-19 08:56:28

+2

聽起來像你的數據庫不是在一個正常的形式,否則這應該永遠不是必要的。請參閱:http://en.wikipedia.org/wiki/Database_normalization#Normal_forms – 2009-09-19 09:11:11

回答

3

一切:

SELECT * FROM mytable 

首先選擇需要的列(與山口開始...)從數據庫模式表:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'mytable' AND column_name LIKE 'col%' 

然後選擇值:

SELECT [found column names from previous query] FROM mytable 
1

SELECT * FROM TABLE_NAME選擇所有列。

7

您可以選擇使用所有列:

SELECT * FROM table_name 

您不能在列名過濾在SELECT語句,而是因爲他們在數據庫本身存在與SHOW列可以在列名稱進行篩選:

SHOW COLUMNS FROM table_name LIKE "_%" 

這將顯示以'_'開頭的列。如果你有一個有很多列的非常大的表,並且你必須從這些字段中構建一個SELECT語句,我會建議編程地構建語句,首先顯示SHOW COLUMNS的列,然後在結果中構建你的SELECT查詢。

1

正如你正在嘗試使用字段名稱,就好像它們是數據一樣,很明顯,您的表格設計不適合您的需求想做。

不是表,你有數據的字段名稱,像:

Id English Swedish German 
------------------------------- 
1 Water Vatten Wasser 
2 Car  Bil  Auto 

你想,你必須在字段中的數據表:

Id Language Word 
------------------- 
1 English Water 
1 Swedish Vatten 
1 German Wasser 
2 English Car 
2 Swedish Bil 
2 German Auto 

從像表這對動態獲取特定語言沒有任何問題,這是第一個表不能動態生成SQL查詢的問題。

在標準化的形式,你會使用兩個表:

LanguageId Language 
--------------------- 
1   English 
2   Swedish 
3   German 

Id LanguageId Word 
------------------------ 
1 1   Water 
1 2   Vatten 
1 3   Wasser 
2 1   Car 
2 2   Bil 
2 3   Auto 
相關問題