3

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

4

1 回答 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
于 2019-03-07T01:05:29.563 回答