2016-03-04 110 views
-1

我需要加入3個表,其中有一些同名的列,如id和一些外鍵列。如何強制mysql在查詢中顯示模式名稱和列名稱?

我做了一個select查詢,結果只帶有表名。如何在我的查詢中獲得像「dbname」,「columnname」這樣的結果,這樣我就可以從哪個表中確定每個列而不必指定查詢中的每一列(僅使用*)?

注:我使用Delphi與ZeosLib,所以使用這些工具的解決方案也可以。但我更喜歡在數據庫中設置它。

+2

調查的一點點,就會發現大量的避免將「SELECT *」用於臨時調查查詢之外的任何其他原因。最重要的是,他們是一羣顯而易見的甚至是一些非常微妙的方式中的嚴重表現殺手。但除此之外,現在通過懶惰地使用'SELECT *'現在保存的幾分鐘意味着將來的維護會妨礙試圖破譯聲明準備返回的數據。固執地堅持你希望找到一個使用衆所周知的壞習慣的「解決方案」可能不是一個好主意。 ;) –

+3

作爲一個附註,返回'TableName.ColumnName'的東西在某些情況下將不會有用。考慮自連接,例如:'SELECT e.EmpId,e.Name,m.Name AS ManagerName FROM Employees e LEFT OUTER JOIN Employees m m.EmpId = e.ManagerId'。所以我強烈建議不要去尋找一個銀子彈的壞主意:只需明確列出列並適當地對它們進行別名。 –

+2

停止使用'SELECT *'編寫查詢,而且您沒有任何問題。沒有理由使用'SELECT *',而不是讓你的代碼在未來更加難以維護並且極度懶惰。如果您指定表格和列,則可以根據需要使用別名來確定列來自哪個表,並且不必浪費時間來提問這樣的問題。使用'SELECT *'的唯一原因是如果你不知道數據庫中列的名稱,在這種情況下你不能進行JOIN。 –

回答

-1

您的查詢

SELECT a.ID, b.ID 
FROM a 
JOIN b 

你需要用特殊字符的字段名doblue報價",爲您的字段名稱的別名,所以更改它。

SELECT a.ID "a.ID", b.ID "b.ID" 

OR

SELECT a.ID "MeaningfullName", b.ID "OtherName" 

比如這裏我有兩個字段名稱"sent_dt",改變一個previous_time

SQL Fiddle Demo

+0

只是在問題中說,我不想這樣做。 – PSyLoCKe

+2

你可以讓你的問題更清楚,只是因爲你不想要它,並不意味着你會擁有它。除非你想創建一個動態SQL? –