2016-01-21 80 views
1

我想加入三張表,productstaxes & categories。所有這些表都有相互矛盾的列名。我知道我們通過創建別名來解決這個衝突。批量創建別名?

products: 
    id 
    name 
    ... 

taxes 
    id 
    name 
    ... 

categories 
    id 
    name 
    ... 

我的問題是,是否有一種方便的方式來批量創建別名?我的意思是一樣的東西

SELECT products.* as product.*, taxes.* as tax.*, categories.* as category.* 
... 

我期望的結果集,有一個像列:

product.id, product.name, tax.id, tax.name, ... 

或者說,我要堅持的東西繁瑣爲:

SELECT products.id as product_id, products.name as product_name, 
     taxes.id as tax_id, taxes.name as tax_name, ... 

回答

0

您在類固醇上搜索*。不幸的是SQL中沒有這樣的功能。

解決方法1:在你喜歡的文本編輯器模塊選擇的

使用功率(VIM,原子,...)。將每列放在新行中。塊選擇寫入AS和表前綴。然後阻止選擇並複製列名稱。

解決方法2:

使用INFORMATION_SCHEMA.COLUMNS生成選擇列表:

SELECT 
string_agg(FORMAT('%s.%s AS %s_%s', "table_name", 
        column_name,"table_name", column_name), ', ') 
FROM information_schema.columns 
WHERE "table_name" IN ('products', 'taxes', 'categories'); 

SqlFiddleDemo

你可以使用E',\n'放置在新行每一列。

輸出:

╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ 
║                     string_agg                     ║ 
╠════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣ 
║ products.id AS products_id, products.name AS products_name, taxes.id AS taxes_id, taxes.name AS taxes_name, categories.id AS categories_id, categories.name AS categories_name ║ 
╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝