mySQL通过列值查询该值所在的列
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/29 07:56:20
mySQL通过列值查询该值所在的列
假设表的结构如下:
ID 列1 列2 列3 列4 列5
1 100
2 1001 300
3 111 400 500
目前知道的条件:
id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这一说,我现在要查找id为3,列值为400的列是哪一列,把这个值更新为空,即删除该值,请问怎么实现比较好呢.
假设表的结构如下:
ID 列1 列2 列3 列4 列5
1 100
2 1001 300
3 111 400 500
目前知道的条件:
id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这一说,我现在要查找id为3,列值为400的列是哪一列,把这个值更新为空,即删除该值,请问怎么实现比较好呢.
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 ;
再问: 你用的是delphi的吧,我最后还是决定使用两列实现,然后增加的时候增加行数,我这个是准备做成好友表的
再答: 1 上边回答中都是纯sql的函数和触发器。 2 你的这个需求应该设计成多对多的关系表的模式,比如 id = 1 时有多个值(把原来的多列集中到一列如b,可取100, 200, 400)的情况设计为: 表(id, b),数据如下: -------------------- id b 1 100 1 200 1 400 --------------------
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 ;
再问: 你用的是delphi的吧,我最后还是决定使用两列实现,然后增加的时候增加行数,我这个是准备做成好友表的
再答: 1 上边回答中都是纯sql的函数和触发器。 2 你的这个需求应该设计成多对多的关系表的模式,比如 id = 1 时有多个值(把原来的多列集中到一列如b,可取100, 200, 400)的情况设计为: 表(id, b),数据如下: -------------------- id b 1 100 1 200 1 400 --------------------
EXCEL函数式问题 在表里查询一个数值,查询后显示表中该数值所在列第一行
求写一sql语句列A 列B2 03 00 54 0把A列和B列的查询的结果显示为列C23-54就是A列遇0,取B列的值,
JAVA 建立一个m行n列的矩阵,找出其中最小的元素所在的行和列,输出该值,并输出行和列.帮我检查下
vfp 在VFP中定义了一个二维数组,如何测知该数组的行数与列数?另:如何查询出一个二维数组某一行或某一列的值?注意题意
MySql的有序列吗?怎么创建序列,并每次增长1
excel 每行最大值个数所在列统计问题 找出该行数据的最大值,并统计该最大值所在列各最大值出现的次数
mysql查询求助:一个非常困难的问题
找出4*5矩阵中最大元素所在的行和列,并输出其值及行号与列号,各元素范围40到50
运筹学单纯形法书上说找出检验数行中最大者所在列作为主列,将主列中大于零的元素分别除以b列中相应的值,写在右边得到bi/y
—列火车以72km/h的速度通过一座长1200m的铁路桥,整列火车完全过桥所用的时间为84s,则该列火车长为多少米,整列
如何让VLookup引用的列随公式所在列的变化而变化
某列火车通过250米长的隧道用了25秒,通过210米长的隧道用23秒,该列车与另一列长320米,每秒行驶18米的列