【问题标题】:How to force mysql to show schema name along with column names in a query?如何强制 mysql 在查询中显示模式名称和列名?
【发布时间】:2016-03-04 20:48:08
【问题描述】:

我需要加入 3 个具有相同名称的列的表,例如 id 和一些外键列。

我进行了一个选择查询,结果仅带有表名。如何在我的查询中获得类似“dbname”。“columnname”的结果,以便我可以识别每个列来自哪个表,而不必指定查询中的每个列(仅使用 *)?

注意:我将 Delphi 与 ZeosLib 一起使用,因此使用这些工具的解决方案也可以。但我更喜欢在数据库中设置它。

【问题讨论】:

  • 一点点调查将揭示大量避免将SELECT * 用于临时调查查询以外的任何事情的原因。最重要的是,它们在许多明显甚至一些非常微妙的方面都是严重的性能杀手。但除此之外,您现在通过懒惰地使用 SELECT * 节省的几分钟意味着未来的维护会受到阻碍,试图准确破译语句打算返回的数据。固执地坚持你希望找到一个使用众所周知的不良做法的“解决方案”可能不是一个好主意。 ;)
  • 附带说明,返回TableName.ColumnName 的内容在某些情况下将无用。考虑自联接,例如:SELECT e.EmpId, e.Name, m.Name AS ManagerName FROM Employees e LEFT OUTER JOIN Employees m ON m.EmpId = e.ManagerId。所以我强烈建议不要寻找一个银弹的坏主意:简单地明确列出列并适当地给它们起别名。
  • 停止使用SELECT * 编写查询,您不会遇到任何问题。没有理由使用SELECT *,除了让你的代码在未来更难维护和极度懒惰之外。如果指定表和列,则可以根据需要使用别名来确定该列来自哪个表,而不必浪费时间问这样的问题。使用SELECT * 的唯一原因是如果您不知道数据库中列的名称,在这种情况下您不能进行 JOIN。
  • 这个问题的正确答案将是处理别人写得不好的 SQL 的主要武器:( 这个问题没有赞成票,但反对票。+1

标签: mysql delphi mariadb


【解决方案1】:

您必须在查询中为您的字段名称创建别名

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

对于带有特殊字符的字段名称,您需要 doblue 引号 ",因此将其更改为。

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

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

例如这里我有两个字段名称"sent_dt" 并将一个更改为previous_time

SQL Fiddle Demo

【讨论】:

  • 刚才在问题中说我不想那样做。
  • 你可以让你的问题更清楚。仅仅因为你不想要它并不意味着你会拥有它。除非你想创建一个动态的 sql?
猜你喜欢
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
相关资源
最近更新 更多