【发布时间】:2015-01-30 23:04:39
【问题描述】:
我做了一个 mysql 查询,它使用存储在表 B 中的值“x”从表 A 获取结果集。现在每当我需要“x”时,我需要重新选择它多达 6 次。
我的查询的简化版本如下所示:
SELECT * FROM A WHERE a = (SELECT x FROM B ...) AND b = (SELECT x FROM B ...)-5 AND c = (SELECT x FROM B ...)+7
在评估我的 sql 语句期间,有没有办法存储该值“x”? 如果不是,那么使用 2 个查询是否有意义(第一个查询获取 'x',第二个查询包含真实语句中的 'x')?
如果你想看我的一个陈述,这里有一个例子:
"(SELECT * FROM map WHERE x BETWEEN :x-:sight and :x+:sight AND y BETWEEN :y-:sight+:map_max_y and :map_max_y) /*1.part*/
UNION
(SELECT * FROM map WHERE x BETWEEN :map_min_x and MOD((:x+:sight),:map_max_x) AND y BETWEEN :y-:sight+:map_max_y and :map_max_y ORDER BY y LIMIT 225) /*2.part*/
UNION
(SELECT * FROM map WHERE x BETWEEN :x-:sight and :map_max_x AND y BETWEEN :map_min_y and :y+:sight ORDER BY y LIMIT 225) /*3.part*/
UNION
(SELECT * FROM map WHERE x BETWEEN :map_min_x and MOD((:x+:sight),:map_max_x) AND y BETWEEN :map_min_y and :y+:sight ORDER BY y LIMIT 225) /*4.part*/";
'x'、'y'、'sight' 都存储在数据库中,多次重新加载它们会伤害我的眼睛(这是尚未从数据库加载它们的旧版本)。而且我认为进行 2 次查询也是一个坏习惯。
先谢谢你们了,伙计们:)
【问题讨论】:
-
Mysql 确实有变量(另见:dev.mysql.com/doc/refman/5.0/en/user-variables.html)。看来这应该可以帮助您自己回答问题?
-
select @x_from_b := x from b? -
谢谢你,我会读一读。看来我错过了 MySQL 课 :)