如何在MySQL中使用自动表别名生成查询结果?

4

MySQL版本10(MariaDB)。 PHP 5.6.3 libmysql 5.1.73。

我已经有一段时间没有使用Oracle了,但是我依稀记得Oracle在这个例子中确实做到了我期望的事情。我可能记错了,或者MySQL只是没有做同样的事情... 这个例子是为了这个问题创建的,所以如果你看到语法问题,那就是与此相关的。

假设有一个简单的模式如下:

Table COUNTRY
ID
NM

Table PROVINCE
ID
NM
CTID

我希望这个查询语句:
SELECT * FROM PROVINCE P JOIN COUNTRY C ON C.ID = P.CTID


能够产生下面的输出结果:
P.ID | P.NM | P.CTID | C.ID | C.NM

不幸的是,输出结果中没有表别名和来自连接表的列,这些列在所选表中缺失于结果中(只有一个ID列在结果中)。就像这样:

ID | NM | CTID

有没有一种方法可以获得上述别名输出?或者还有其他方法可以在不必在查询中明确使用P.ID as P_ID这样的内容的情况下获取结果中的所有五列?

1
可能是重复的问题:在连接中,如何为所有列名添加它来自的表的前缀 - Pinke Helga
使用您提供的查询和 ON 子句,我无法重现 ID | NM | CTID。它会返回所有列而没有表名。只有当使用 USING 子句时,才不会出现重复列,因为 USING 子句默认使用相等条件进行连接。问题详情应该更加精确。 - Pinke Helga
1个回答

1
MySQL不会像那样创建合格的别名。如果您没有显式命名别名,且选择列表包括多个表中具有相同名称的列,则结果中将有重复的列名。
您不一定需要为所有列创建别名,只需要区分需要的列即可。
您不必放弃通配符,但应将通配符限制在特定的表上,对于这些表,您不需要创建别名。
SELECT C.*, P.ID AS P_ID, P.NM AS P_NM
FROM PROVINCE P JOIN COUNTRY C ON C.ID = P.CTID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接