MySQL:设置变量并在同一查询中的where子句中使用

时间:2011-10-22 07:08:27

标签: mysql

我在MySQL中设置用户变量并在同一查询中使用它时遇到了一些麻烦。我发现了一两个与此类似的问题,但在我的案例中无法解决任何问题。

这是我的查询,删除了一点。为简单起见,我替换了值和名称和东西,并删除了一些不相关的部分,但留下了某些上下文的基本结构。不是真的相关,但是我正在使用CodeIgniter的活动记录类来构建查询。

SELECT * FROM (things, (SELECT @exp_time := IF(5 < 10, X, Y) as var))
JOIN more_things ON ...
WHERE ...
AND @exp_time < UNIX_TIMESTAMP()
AND `@exp_time` > 1319180316
ORDER BY ...
LIMIT 1 ...

我得到的错误是:“每个派生表必须有自己的别名。”

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您的实际错误是因为(正如错误消息所解释的那样)您没有为派生表指定别名,这在MySQL中是 required (即使您从未在其他任何地方使用别名在你的查询中。)

SELECT *
FROM
(
    things,
    (SELECT @exp_time := IF(5 < 10, X, Y) as var) AS your_alias
)                 
...

但是你不需要这里的变量。现在您的派生表实际上有一个名称,您可以引用您的值而无需将其存储为变量。