在一个自学网站上,我使用了一个SQLlite界面,它允许我引用我刚刚写的一篇文章。
示例:
SELECT CONCAT(fName, ' ', lName) AS **Name**, CONCAT(**Name**, ' ', ID)
FROM Players;我尝试在MySQL上这样做(如果重要的话,我使用的是Cloud9平台),但它不起作用。它应该工作,而我根本没有做对吗?或者根本就没有这回事?
发布于 2018-01-20 04:24:54
它应该不会起作用。一般而言,SQL不保证SELECT中表达式的求值顺序。因此,它不允许重用在同一级别中定义的别名。
在您的示例中,最简单的解决方案是重复该表达式:
SELECT CONCAT(fName, ' ', lName) AS Name, CONCAT(fName, ' ', lName, ' ', ID)
FROM Players;不是很优雅,但它能完成工作。
在MySQL中,这比子查询好,因为MySQL具体化了子查询,增加了额外的开销。
发布于 2018-01-20 04:19:19
你可以试试这个:
SELECT CONCAT(A.Name, ' ', A.ID) FROM
(
SELECT ID, CONCAT(fName, ' ', lName) AS Name FROM PLAYERS A
) A然而,从性能的角度来看,我认为使用原始查询会更好,即使它更长。
https://stackoverflow.com/questions/48348856
复制相似问题