【发布时间】:2019-08-13 06:14:39
【问题描述】:
我正在努力查询 mysql 数据库。以下是我整个更长查询的示例:
SELECT * ,
CASE WHEN t1.route = NULL THEN NULL ELSE left(t1.route,4) END AS node1,
CASE WHEN node1 = NULL THEN NULL ELSE CASE WHEN CHAR_LENGTH(node1) = CHAR_LENGTH(route) THEN NULL ELSE SUBSTRING(route,6,4) END END AS node2
FROM (SELECT *, [...] FROM main_db) t1;
当我在mysql workbench上运行时,出现这个错误:
Error Code: 1054. Unknown column 'node1' in 'field list'
我注意到我的代码在 TSQL 数据库上完美运行,但在 MYSQL 上却没有,我认为问题是在 mysql 执行每个操作后,它不会更新列列表,因此我无法从在同一语句中创建的列。
我之前通过在另一个查询中嵌套查询来解决此类问题,但由于我不希望有更多或更少的 14/16 嵌套查询,我正在寻找一种有效的方法来解决我的问题。
你有什么想法吗?
【问题讨论】:
-
列别名 node1 不在其定义的同一选择列表的范围内。你需要一个派生表(子查询)!
-
CASE WHEN t1.route = NULL THEN NULL ELSE left(t1.route,4) END AS node1,可以简化为left(t1.route,4) AS node1。 -
@jarlh 好点,谢谢