在一个自学网站上,我使用了一个sqllite界面,允许我引用我刚刚编写的一个项目。前任。:
SELECT CONCAT(fName, ' ', lName) AS**Name**, CONCAT(**Name**, ' ', ID) FROM Players;
我在mysql上尝试过这样做(如果有必要的话,我使用的是cloud9平台),但没有成功。它应该工作,而我只是做得不对吗?或者根本就没有这回事?
ykejflvf1#
它不应该起作用。sql(通常)不保证表达式在 SELECT . 因此,它不允许重复使用在同一级别中定义的别名。在您的案例中,最简单的解决方案是重复以下表达式:
SELECT
SELECT CONCAT(fName, ' ', lName) AS Name, CONCAT(fName, ' ', lName, ' ', ID) FROM Players;
不优雅,但它能完成任务。在mysql中,这比子查询好,因为mysql具体化子查询,增加了额外的开销。
6ju8rftf2#
你可以试试这个:
SELECT CONCAT(A.Name, ' ', A.ID) FROM ( SELECT ID, CONCAT(fName, ' ', lName) AS Name FROM PLAYERS A ) A
但是,从性能的Angular 来看,我认为使用原始查询会更好,即使它更长。
2条答案
按热度按时间ykejflvf1#
它不应该起作用。sql(通常)不保证表达式在
SELECT
. 因此,它不允许重复使用在同一级别中定义的别名。在您的案例中,最简单的解决方案是重复以下表达式:
不优雅,但它能完成任务。
在mysql中,这比子查询好,因为mysql具体化子查询,增加了额外的开销。
6ju8rftf2#
你可以试试这个:
但是,从性能的Angular 来看,我认为使用原始查询会更好,即使它更长。