Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:在Join语句和Join语句顺序中使用列别名?_Php_Mysql_Join - Fatal编程技术网

Php MySQL:在Join语句和Join语句顺序中使用列别名?

Php MySQL:在Join语句和Join语句顺序中使用列别名?,php,mysql,join,Php,Mysql,Join,只是一个小的MySQL语句示例: SELECT m.nameMarket nm, m.idCity idc, c.cityname cn FROM markets m LEFT JOIN cities c ON m.idCity = c.idCity 一切正常。为什么两者都不起作用(在Join语句的Select子句中使用别名): 或者我不能在Join语句中使用列别名吗?(我很困惑,因为我还可以像第一个SQL代码那样在语句中使用表别名) 第二个问题是:左连接中语句的顺序是否相

只是一个小的MySQL语句示例:

SELECT    m.nameMarket nm, m.idCity idc, c.cityname cn 
FROM      markets m 
LEFT JOIN cities c ON m.idCity = c.idCity
一切正常。为什么两者都不起作用(在Join语句的Select子句中使用别名):

或者我不能在Join语句中使用列别名吗?(我很困惑,因为我还可以像第一个SQL代码那样在语句中使用表别名)

第二个问题是:左连接中语句的顺序是否相关?即:

SELECT    m.nameMarket nm, m.idCity idc, c.cityname cn 
FROM      markets m 
LEFT JOIN cities c ON m.idCity = c.idCity

SELECT    m.nameMarket nm, m.idCity idc, c.cityname cn 
FROM      markets m 
LEFT JOIN cities c ON c.idCity = m.idCity
我的意思是结果是一样的,但是否存在速度/性能问题或其他相关问题?
谢谢

当你选择某样东西并给它取别名时,请仔细想想。在您选择它之前,它不存在(例如,如果它是某个事物的子集,该怎么办)。那么,在一个还不存在的别名上进行连接有意义吗?它基本上是运行时应用于整个语句的最后一件事

一个表已经存在,所以用别名引用它是有意义的。但是,通常在查询过程中,必须进行单独的引用才能再次引用该表。如果最终在同一个表上执行多个联接,这可以防止歧义

顺序重要吗?那么,查询优化器将尝试各种排列并选择最佳排列。所以不,不应该

为什么两者在这里都不起作用(在Join语句的Select子句中使用别名)

正如您所发现的,
SELECT
子句中的列别名在其他子句中不起作用。在一些RDBMS中,它们在
ORDER BY
子句中工作,在
WHERE
子句中工作的频率较低,但大多数情况下它们不工作。原因很简单,因为数据库引擎直到查询执行的很晚才查看或分配
SELECT
子句中的别名。唯一的例外是在子查询中

左联接中语句的顺序是否相关

我的意思是结果是一样的,但是否存在速度/性能问题或其他相关问题

我希望数据库引擎能够完全相同地解析查询。我甚至可以说,如果数据库引擎不存在错误,它就存在错误

启动MySQL查询分析器,使用
EXPLAIN
命令查看执行计划。它们应该是相同的

SELECT    m.nameMarket nm, m.idCity idc, c.cityname cn 
FROM      markets m 
LEFT JOIN cities c ON m.idCity = c.idCity

SELECT    m.nameMarket nm, m.idCity idc, c.cityname cn 
FROM      markets m 
LEFT JOIN cities c ON c.idCity = m.idCity