mySQL通过列值查询该值所在的列假设表的结构如下:ID 列1 列2 列3 列4 列51 1002 1001 3003 111 400 500目前知道的条件:id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 07:45:07
mySQL通过列值查询该值所在的列假设表的结构如下:ID 列1 列2 列3 列4 列51 1002 1001 3003 111 400 500目前知道的条件:id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这
mySQL通过列值查询该值所在的列
假设表的结构如下:
ID 列1 列2 列3 列4 列5
1 100
2 1001 300
3 111 400 500
目前知道的条件:
id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这一说,我现在要查找id为3,列值为400的列是哪一列,把这个值更新为空,即删除该值,请问怎么实现比较好呢.
mySQL通过列值查询该值所在的列假设表的结构如下:ID 列1 列2 列3 列4 列51 1002 1001 3003 111 400 500目前知道的条件:id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这
1 如果只是想查询出是那一列,可创建一个自定义函数来实现:
delimiter |
drop function if exists fun_tab_test |
create function fun_tab_test (par_id int, par_comparevalue int)
returns varchar(20)
begin
declare rvalue varchar(20);
select ( case when count(*) = 0 then '' when b = par_comparevalue then 'b' when c = par_comparevalue then 'c' else '' end ) as colA
into rvalue from tab_naem where id = par_id;
return rvalue ;
end |
delimiter ;
使用:
select fun_tab_test(1, 400); --参数分别为传入的id和对比的值400
结果为含400值的列或''(没有找见包含的列)时,接下来做你想做的update或delete等即可;
2 如果要完成一个自动的update,可使用before update触发器,提供个简单示例,进行适应性修改:(这里n为表名,a为id列,b,c 为两个可能包含400值的列)
delimiter |
drop trigger if exists tr_n_before_update; |
create trigger tr_n_before_update before update on n
for each row begin
declare svalue int;
select b into svalue from n where n.a = new.a;
if svalue = 400 then
set new.b = 0;
end if;
select c into svalue from n where n.a = new.a;
if svalue = 400 then
set new.c = 0;
end if;
end; |
delimiter ;