sql 使用游标来删除表中奇数行的记录

sql 使用游标来删除表中奇数行的记录,第1张

似乎用游标有点大才小用了。

新建表来测试即可

CREATE DATABASE test;

USE test;

CREATE TABLE test(

id INT PRIMARY KEY NOT NULL AUTO_INCREMENT

);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

INSERT INTO test VALUES(NULL);

DELETE语句:

DELETE FROM test WHERE (id%2)=1;

SELECT FROM test;

效果:

通过查询语句select from user where id=1

我不知道你这个username指的是不是字段,如果是要取出表中某个字段的值。

可以通过select 字段名1,字段名2 from user where id=1。

-- MS sql server2005以上,ORACLE

select  from (

select row_number() over (  order by starttime asc) as rownum, from steriworkrecord

where starttime  between '2013-11-1' and '2013-12-31'

)  a

where rownum between 2 and 10

-- 注意( order by starttime asc)是你排序的方式asc升序,desc降序

-- ORACLE还可以

select  from (

select rownum as n, from steriworkrecord

where starttime  between '2013-11-1' and '2013-12-31'

)  a

where an between 2 and 10

-- MYSQL,postgreSQL似乎只能标量子查询

SELECT FROM (

SELECT a,(

SELECT count()  FROM steriworkrecordb    WHERE bID<= aID) AS n

from steriworkrecorda

) ts

where tsn between 2 and 10

-- 注意bID<= aID  其中ID换成你的主键名称

行号,是指在一定顺序的记录中排列的名次数。

在sql中,如果没有排序,记录顺序是不一定的,

所以,也就不能确定行号(这叫已知条件不足吧)。

但是您如果告诉了要按什么顺序排列,就可以很简单地求出行号。

比如按您给出的两列col1,col2排序,就可以这样求行号:

select

行号=(select

count(1)

from

tablename

a

where

acol110000+acol2<=tablenamecol110000+tablenamecol2),

from

tablename

order

by

col1,col2

--PL/SQL块形式的:

DECLARE

i NUMBER;

nj NUMBER := 0;

no NUMBER := 0;

BEGIN

FOR i IN 1 100 LOOP

IF MOD(i, 2) = 1 THEN

nj := nj + i;

ELSE

no := no + i;

END IF;

END LOOP;

dbms_outputput_line('奇数和:' || nj);

dbms_outputput_line('偶数和:' || no);

END;

/

--一句话的:

SELECT SUM(CASE

WHEN MOD(rownum, 2) = 1 THEN

rownum

END) 奇数和,

SUM(CASE

WHEN MOD(rownum, 2) = 0 THEN

rownum

END) 偶数和

FROM dual

CONNECT BY rownum <= 100;

弄个循环做

我写的是sqlserver哦 你oracle自己稍微修改下

#开头的是临时表

@开头的是变量

select id = identity(int,1,1),币种,金额本币),金额(外币)

into #temp

from table

-- 给这个表做个自增长列作为主键 如果他本来有主键就不需要了

declare @a int, @n int, @type varchar(5)

-- 作用分别是: 自变量, 循环终止标志位, 本外币

set @a = 1

-- 自变量初始值

set @n = (select count() from #temp)

-- 终止标志位为总记录条数

create table #result(

币种 varchar(5),

金额 money)

-- 存放结果

while @a<= @n

begin

set @type = (select 币种 from #temp where id=@a)

-- 记录币种

if @type = '001'

-- 本币

begin

insert into #result

select 币种,金额(本币)

from #temp

where id=@a

end

else

-- 外币

begin

insert into #result

select 币种,金额(外币)

from #temp

where id=@a

-- 先插入这条记录的币种,外币金额

insert into #result

select '001',金额(本币)

from #temp

where id=@a

-- 再插入一条币种为'001',金额为这条记录的本币金额的记录

end

@a = @a + 1

-- 自变量增加1 指向下一条记录

end

什么数据库\x0d\如果是 Oracle 或者 SQL Server 的话。 可以\x0d\\x0d\SELECT\x0d\ \x0d\FROM\x0d\(\x0d\ SELECT ROW_NUMBER() OVER( ORDER BY 排序的字段 ) AS 序号\x0d\ 表\x0d\ FROM\x0d\ 表\x0d\) tmp\x0d\WHERE\x0d\ tmp序号 = 12345\x0d\\x0d\如果是 MySQL 的话, 直接\x0d\SELECT FROM 表 LIMIT 12344, 1\x0d\注:\x0d\LIMIT 接受一个或两个数字参数。\x0d\参数必须是一个整数常量。\x0d\如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,\x0d\第二个参数指定返回记录行的最大数目。\x0d\初始记录行的偏移量是 0(而不是 1)

update 表名 set J=((case when a%2=0 then 0 else a end )+(case when b%2=0 then 0 else b end )+(case when c%2=0 then 0 else c end ))

select from 表名

以上就是关于sql 使用游标来删除表中奇数行的记录全部的内容,包括:sql 使用游标来删除表中奇数行的记录、如何用SQL语句取出数据库中的特定一条数据、sql查询后的语句如何获取行数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10155522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存