mySQL通过列值查询该值所在的列

假设表的结构如下:ID列1列2列3列4列51100210013003111400500目前知道的条件:id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值... 假设表的结构如下:
ID 列1 列2 列3 列4 列5
1 100
2 1001 300
3 111 400 500
目前知道的条件:
id是给定的,即行可以确定,然后需要查找出这一行中是否具有某一个列值,比如这一说,我现在要查找id为3,列值为400的列是哪一列,把这个值更新为空,即删除该值,请问怎么实现比较好呢。
展开
 我来答
gwbnet
2012-10-20 · TA获得超过893个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:219万
展开全部
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的吧,我最后还是决定使用两列实现,然后增加的时候增加行数,我这个是准备做成好友表的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式