我在创建视图时在列上获取NULL - 使用函数填充NULL列

时间:2013-04-09 20:08:23

标签: mysql views

编辑:请在下面查看我的修改

在我之前提到的问题link之后,我决定创建一个变量和一个函数来返回该变量,并在create view语句中使用该函数。

所以,我把变量称为零:

SET @auxvar := 0;

然后我宣布了这个函数:

create function auxfunc() 
returns INTEGER DETERMINISTIC NO SQL return @auxvar+1;

然后我这样做:

CREATE OR REPLACE VIEW vwaux (mac, ip, num_row) 
AS SELECT testing.mac, testing.ip, auxfunc() AS row_number

FROM testing

order by ip;

但生成的视图包含以下数据:

|    mac   |      ip      | row_number |
----------------------------------------
| s23Ssad2 | 192.168.1.1  |   NULL     |
| sd57shgd | 192.168.1.88 |   NULL     |
| adfsfy65 | 192.168.1.91 |   NULL     |
| at56ss34 | 192.168.1.92 |   NULL     |

依此类推......但是我期待它是1,2,3,4 ...它有NULL。有关如何修复此NULL的任何想法吗?

编辑部分:------------------------------

我已经设法获得了NULL,但仍然没有达到我需要的程度。 我将函数更改为接受输入参数,并在函数内部将其递增一个单位。

这是新功能:

CREATE FUNCTION auxfunc(param INT) RETURNS int(11)
    NO SQL
    DETERMINISTIC
begin
set param = param +1;
return param;
end

然后我将视图创建为:

CREATE OR REPLACE VIEW vwaux (mac, ip, num_row) 
AS SELECT testing.mac, testing.ip, auxfunc(0) AS row_number

FROM testing

order by ip;

但是我得到'1'而不是NULL。像这样:

|    mac   |      ip      | row_number |
----------------------------------------
| s23Ssad2 | 192.168.1.1  |   1        |
| sd57shgd | 192.168.1.88 |   1        |
| adfsfy65 | 192.168.1.91 |   1        |
| at56ss34 | 192.168.1.92 |   1        |

仍然不是1,2,3,4,5,6 ......

1 个答案:

答案 0 :(得分:0)

mysql函数不通过引用获取参数。您的本地函数无法更改变量的全局值。 您可以改为将row_number定义为auto_increment字段的临时表,并在该表中选择您的查询:

drop table if exists __temp;
create table __temp (mac text, ip text, row_number integer primary key auto_increment);
insert into __temp (mac, ip) select testing.mac, testing.ip;
select * from __temp;