如何在 MySQL 中使用自动 table 别名生成查询结果?
How to produce query results with automatic table aliases in MySQL?
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
不幸的是,输出没有 table 别名,并且来自所选 table 中的连接 table 的列从结果中丢失(结果中只有一个 ID 列)。像这样:
ID | NM | CTID
有没有办法得到上面显示的别名输出?或者是否有其他方法可以在 结果中获取所有五列,而 不必在查询中显式使用 P.ID as P_ID
之类的内容?
MySQL 不会像那样创建合格的别名。如果您没有明确命名别名,如果 select-list 包含多个表中具有相同名称的列,那么结果中将有重复的列名。
您不必为所有列创建别名,只需为您需要区分的列创建别名即可。
你不必放弃通配符,但你应该将通配符限制在特定的表中,你不需要为其创建别名。
SELECT C.*, P.ID AS P_ID, P.NM AS P_NM
FROM PROVINCE P JOIN COUNTRY C ON C.ID = P.CTID
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
不幸的是,输出没有 table 别名,并且来自所选 table 中的连接 table 的列从结果中丢失(结果中只有一个 ID 列)。像这样:
ID | NM | CTID
有没有办法得到上面显示的别名输出?或者是否有其他方法可以在 结果中获取所有五列,而 不必在查询中显式使用 P.ID as P_ID
之类的内容?
MySQL 不会像那样创建合格的别名。如果您没有明确命名别名,如果 select-list 包含多个表中具有相同名称的列,那么结果中将有重复的列名。
您不必为所有列创建别名,只需为您需要区分的列创建别名即可。
你不必放弃通配符,但你应该将通配符限制在特定的表中,你不需要为其创建别名。
SELECT C.*, P.ID AS P_ID, P.NM AS P_NM
FROM PROVINCE P JOIN COUNTRY C ON C.ID = P.CTID