2016-03-04 107 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? –