select * from (
南縣網(wǎng)站建設公司成都創(chuàng)新互聯(lián)公司,南縣網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為南縣上千提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設要多少錢,請找那個售后服務好的南縣做網(wǎng)站的公司定做!
select
tablename_tmp.*,
@rownum:=@rownum+1 rownum,
if(@pstatus=status ,@rank:=0,@rank:=1) as rank,
@pstatus := tablename_tmp.status
from (
select * from tablename1
)
tablename_tmp ,
(select @rownum :=0 , @pstatus := null ,@rank:=0) a
) a
where a.rank=1 or a.status=0
order by a.rownum
需求說明
1、我需要查詢某列不重復的數(shù)據(jù)
2、并且顯示不重復數(shù)據(jù)的所有項
sql語句如下
select * from data group by address;
如果是僅僅查詢某列不重復數(shù)據(jù),只需要一列
效果如下
sql語句
select DISTINCT address from data
這里有一個非常非常需要注意的地方:
SELECT DISTINCT [字段名]后面不能再跟其他的字段,否則檢索出來的記錄仍然會含有重復項;
錯誤寫法:
SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [檢索條件字句]
如果我們的記錄集里還需要有其他字段值 ,那怎么辦呢?
實際上,我們完全可以用另一種辦法來解決問題;只是需要用到子查詢而已!
使用GROUP BY 分組
有一點需要注意:
使用帶有GROUP BY字句的查詢語句時,在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合組函數(shù)
所以用這樣一句SQL就可以去掉重復項了:
select * from msg group by terminal_id;
這樣就得到我們想要的結(jié)果集了:
1 如果只是想查詢出是那一列,可創(chuàng)建一個自定義函數(shù)來實現(xiàn):
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); --參數(shù)分別為傳入的id和對比的值400
結(jié)果為含400值的列或''(沒有找見包含的列)時,接下來做你想做的update或delete等即可;
2 如果要完成一個自動的update,可使用before update觸發(fā)器,提供個簡單示例,進行適應性修改:(這里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 ;