Oracle可以点删除行,Oracle删除行匹配多个值

6 个答案:

答案 0 :(得分:44)

不,你只需要括号:

DELETE FROM student WHERE

(student.course, student.major) IN

(SELECT schedule.course, schedule.major FROM schedule)

答案 1 :(得分:14)

您也可以使用EXISTS子句:

DELETE FROM student WHERE

EXISTS

(

SELECT 1 FROM schedule

WHERE schedule.course=student.course

AND schedule.major=student.major

)

答案 2 :(得分:7)

DELETE FROM student WHERE

(student.course, student.major) IN

(SELECT schedule.course, schedule.major FROM schedule)

在where子句中放置关于条款的parens。干杯!

答案 3 :(得分:3)

在Oracle中,您可以从内联视图执行删除操作,但它通常需要一个外键,以确保从中删除行的表中的行不能由视图中的多行表示

create table parent (id number primary key);

create table child (id number primary key, parent_id number references parent);

insert into parent values(1);

insert into child values(2,1);

delete from (select * from parent p, child c where c.parent_id = p.id);

答案 4 :(得分:3)

请注意,如果任何属性为null,则该行被视为不是IN。也就是说,如果课程相同且学生和学历专业都为空,则不会删除行。

如果某个属性(例如major)可能为null,并且您希望null = null为true,请尝试:

DELETE

FROM student

WHERE (student.course, NVL(student.major,'sOmeStRinG') )

IN (SELECT schedule.course, NVL(schedule.major,'sOmeStRinG') FROM schedule)

答案 5 :(得分:2)

下面的语法适用于SQLServer ,但我相信它是标准的sql

但正如评论中指出的那样,这是非标准实现,Oracle目前不支持。

我会留待参考

delete s

from

student s

inner join schedule sch

on s.course=sch.course

and s.major = sch.major

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值