如何在mysql中声明一个变量,让我的第二个查询可以使用它?
我想这样写:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
如何在mysql中声明一个变量,让我的第二个查询可以使用它?
我想这样写:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
当前回答
我想在这里给出我的答案,这样人们就可以尝试一下,我认为MySql的解决方案更容易理解:
set @countVal = (select count(*) from STATION);
/**
499/2 = 249,5 -> 250 -- ceil
499/2 = 249,5 + 1 = 250,5 -- floor 250
500/2 = 250 -- ceil 250
= 250 + 1 = 251 -- flor 251
**/
set @ceilVal = ceil(@countVal/2);
set @floorVal = floor( (@countVal/2) + 1);
SELECT ROUND(AVG( latitude ),4) FROM
(SELECT @lineNum:= @lineNum + 1 as id,
lat_n as latitude
FROM STATION s, ( SELECT @lineNum :=0 ) pivot
ORDER BY lat_n) as a
WHERE id IN ( @ceilVal, @floorVal );
其他回答
我想在这里给出我的答案,这样人们就可以尝试一下,我认为MySql的解决方案更容易理解:
set @countVal = (select count(*) from STATION);
/**
499/2 = 249,5 -> 250 -- ceil
499/2 = 249,5 + 1 = 250,5 -- floor 250
500/2 = 250 -- ceil 250
= 250 + 1 = 251 -- flor 251
**/
set @ceilVal = ceil(@countVal/2);
set @floorVal = floor( (@countVal/2) + 1);
SELECT ROUND(AVG( latitude ),4) FROM
(SELECT @lineNum:= @lineNum + 1 as id,
lat_n as latitude
FROM STATION s, ( SELECT @lineNum :=0 ) pivot
ORDER BY lat_n) as a
WHERE id IN ( @ceilVal, @floorVal );
集
SET @var_name = value; /* or */ SET @var_name := value;
运算符=和:=都被接受
选择
SELECT col1, @var_name := col2 from tb_name WHERE "condition";
如果发现多个记录集,则只保留col2中的最后一个值(覆盖);
SELECT col1, col2 INTO @var_name, col3 FROM ...
在这种情况下,选择的结果不包含col2值
使用的两种方法
——TRIGGER_BEFORE_INSERT——从计算中设置列值
...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col = IFNULL( @NR, 0 ) + 1;
...
设置值
declare @Regione int;
set @Regione=(select id from users
where id=1) ;
select @Regione ;
声明: SET @a = 1; 用法: INSERT INTO ' t ' (' c ') VALUES (@a);
对于任何使用concat_ws函数中的@variable来获得连接值的人,不要忘记用空值重新初始化它。否则,它可以对同一会话使用旧值。
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;