2011-04-07 73 views
2

有什麼方法可以選擇帶有通配符的列。選擇MySQL通配符

能夠選擇具有名稱類型可以是「SELECT %type% from table_name」列?

回答

3

不是。您可以使用* column wildcard來選擇所有列。

SELECT a.id, a.title, b.* 
    FROM articles AS a 
    JOIN blurbs AS b ON a.id = b.article 

但是,除非你正在寫一個數據庫管理程序,你不應該使用*:如果你要加入多個表,您可以通過表名或別名前綴*選擇特定的表中的所有列。

或者,您可以通過獲取表元數據來獲取列名稱,從而在SQL或其他語言中構建語句。僅使用MySQL,您可以查詢INFORMATION_SCHEMA數據庫中的COLUMNS表以獲取列名,並使用GROUP_CONCAT爲該語句構建列列表。

SELECT CONCAT(
     'SELECT ', 
     GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '), 
     ' FROM ', :db, '.', :table, 
     ' WHERE ...' 
    ) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table 

用適當的值替換「:db」,「:table」和「...」。你甚至可以把它變成一個準備好的聲明,以便你可以將它用於任何表格。從那裏,PREPAREEXECUTE構建的聲明。

如果你不侷限於SQL進行編程,它應該不那麼混亂。您選擇的語言的數據庫驅動程序可能會提供獲取元數據的方法。實際的實現類似於純粹的SQL方法(獲取列名,彙編語句,準備,執行),但不應該如此醜陋,因爲你會使用算法而不是聲明式語言。

我會在看到,這是實際需要的情況很感興趣..

+0

如果你實現了一個類層次結構作爲規範化的一組表,你將有幾個表連接到基類表。如果知道要檢索的實例的類型,則知道要從中讀取的表。因此,需要參數表名稱。如果我沒有弄錯,hibernate會對這些情況下涉及的所有表進行聯合查詢並相應地處理結果。 – Dan 2011-04-07 13:57:11

+0

SHOW COLUMNS FROM table_name where'like'%type%' - 如果在子查詢中使用,但它顯示額外的列類型,空,鍵,默認,額外等,這可能會有所幫助......我只希望列名更好逗號分隔.. 。搜索解決方案... – Mark 2011-04-07 14:03:39

+0

1.使用查詢 獲取所需的列名2.使用點1的結果並在選擇查詢中使用... – Mark 2011-04-07 14:05:26

0

當然是可能的,如果你使用的是前端的語言。如果php只是使用

$fieldlist= "cola, colb "; 
$tablename="tabl"; 
"select $fieldlist from $table" 

我的直覺告訴你正在做一些簡單的使用php-mysql,但我可能是錯的。

1

您可以使用information_schema然後使用準備好的語句在名稱內找到所有包含類型的字段。

set @str = (concat('select ',(select concat(group_concat(column_name),' from ',table_name) 
from information_schema.columns 
where table_schema = 'your_db_name' and table_name = 'your_table_name' and column_name like '%type%'))); 
prepare stmt from @str; 
execute stmt; 
deallocate prepare stmt;