2012-10-31 55 views
6

範例table:Mysql的前綴自動添加到域

id | field1 | field2 
-------------------- 

表2:

id | id1 | field1 | field2 
-------------------------- 

是否有可能做到這一點:

select t1.*, t2.* from table1 t1 inner join table2 t2 on t1.id = t2.id1 

和接受這樣的結果:

t1_id | t1_fiedl1 | t1_field2 | t2_id | t2_id1 | t2_fiedl1 | t2_field2 
---------------------------------------------------------------------- 

我們的目標是使MySQL自動添加前綴導致領域,避免長時間分型,如

select t1.id as t1_id, t1.field1 as t1_field1 

+1

你試過了嗎? – hims056

+0

您可以得到標題,我不確定數據,請提供示例數據並說明您的期望 –

+0

我總是在字段名稱的前面加上所有表格的表名稱的描述性三字縮寫。 –

回答

4

的SQL引擎將不會重寫查詢,爲您「自動別名」場 - 別名必須是明確的。

但是,您在客戶端代碼中有兩個選項。首先,你明顯可以編寫一個抽象概念,將查詢拼湊在一起,並在此過程中提供別名。

其次,更簡單的是,正在使用與每個結果集關聯的底層MYSQL_FIELD結構中公開的信息。它們包含有關每個字段的字段和表名(以及其他信息),允許您以編程方式將t1_field1縫合在一起,並且無需事先知道字段名稱。此信息如何公開取決於您的特定客戶端API。

+1

一些示例代碼會很好。 – petermeissner

-1
select t1.id as t1_id, t1.fiedl1 as t1_fiedl1 , 
    t1.field2 as t1_field2 ,t2.id as t2_id , 
    ,t2.fiedl1 as t2_fiedl1 ,t2.field2 as t2_field2 
    from table1 t1 left outer join table2 t2 on t1.id = t2.id1 
+0

問題的關鍵在於能夠匿名選擇所有的字段,並且仍然有前綴。 –

+0

試試這個更新的解決方案 – jainvikram444

2

我們的目標是使MySQL自動添加前綴以避免長時間打字,如

select t1.id as t1_id, t1.field1 as t1_field1 and so on

如果兩個表中的字段名相同,則不會從兩個表中獲取列。
您必須編寫具有特定別名的列名才能實現。

例如,

SELECT t1.id t1_id, t1.field1 t1_fiedl1, t1.field2 t1_field2 
     ,t2.id t2_id, t2.id1 t2_id1 ,t2.field1 t2_fiedl1, t2.field2 t2_field2 
FROM table1 t1 
INNER JOIN table2 t2 
     ON t1.id = t2.id1 

See this SQLFiddle Demo

如果在兩個表中的字段名稱不同,那麼你可以做,以達到預期的效果。

例如,

SELECT  t1.*, t2.* 
FROM  table1 t1 
INNER JOIN table2 t2 
     ON t1.id = t2.id1; 

See this SQLFiddle

+1

我知道。但它真的很煩人,特別是當我在有20個以上字段的表上操作3個或更多的連接時。而且,我應該如何考慮在每個表格中使用的「name」字段?這就是我問的原因。也許有更靈活的解決方案。 – abr

+0

引擎總是返回投影中的* all *字段。但是,基於默認的非限定列名獲取行的客戶端API不會看到具有相同「名稱」的多個字段。 SQLFiddle出現使用這樣一個API,這就是爲什麼它在你查詢時不能區分'id'和'id',但是命令行'mysql(1)'客戶端可以。 – pilcrow

0

不,mysql不會在自動加上的前綴。您要做的唯一事情就是在列周圍手動添加alias。如果你不想這樣做,那麼最好的辦法是重新命名你的列,從每個表中取得唯一的名字。如果您不添加alias,並且列的名稱相同,則傾向於顯示第一個表中的列。這是正常的,因爲表之間的名稱衝突。