微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除由连接多个表的选择查询获取的行

如何解决删除由连接多个表的选择查询获取的行

我写了以下选择:

SELECT r.ID,r.NAME,r.REMARK,u.user_id,u.deadline,u.creation_date,d.NEXT_TEST_DATE,t.TEST_INTERNAL_EXTERNAL FROM reminder r,reminder_users u,device d,device_test t where r.id = u.reminder_id and u.receipt = 0 and (regexp_replace(r.origin_values,'[^0-9]','')) = d.id and d.NEXT_TEST_INT_ID = t.id  and t.TEST_INTERNAL_EXTERNAL = 0 and r.NAME like '%Interne%' and r.NAME not like '%Externe%' and u.deadline <> d.NEXT_TEST_DATE_INTERNAL and u.DEADLINE > sysdate GROUP BY r.ID,u.audt_creation_date,d.NEXT_TEST_DATE_INTERNAL,t.TEST_INTERNAL_EXTERNAL ORDER BY u.deadline;

我想做什么:我想删除提醒中的行,这些行是由描述的选择获取的。

我尝试了什么:

DELETE from REMINDER where id in (SELECT r.ID,t.TEST_INTERNAL_EXTERNAL ORDER BY u.deadline);

结果:00907. 00000 - "missing right parenthesis"

我想知道我是否可以通过这种方式基本上删除这些行。我也试过 'exists' 导致同样的错误

有什么建议吗?提前致谢!

解决方法

从您的子查询中删除 order by 子句,它应该可以工作:

DELETE from BSRMD_REMINDER where id in (SELECT r.ID FROM bsrmd_reminder r,bsrmd_reminder_users u,bsdev_device d,bsdev_device_test t where r.id = u.reminder_id and u.receipt = 0 and (regexp_replace(r.origin_values,'[^0-9]','')) = d.id and d.NEXT_TEST_INT_ID = t.id  and t.TEST_INTERNAL_EXTERNAL = 0 and r.NAME like '%Interne%' and r.NAME not like '%Externe%' and u.deadline <> d.NEXT_TEST_DATE_INTERNAL and u.DEADLINE > sysdate GROUP BY r.ID,r.NAME,r.REMARK,u.user_id,u.deadline,u.audt_creation_date,d.NEXT_TEST_DATE_INTERNAL,t.TEST_INTERNAL_EXTERNAL );

或者更好地使用exists:

  DELETE from BSRMD_REMINDER 
where exists 
(
    SELECT 1 
    FROM bsrmd_reminder r,bsdev_device_test t 
    where r.id = u.reminder_id and u.receipt = 0 and (regexp_replace(r.origin_values,'')) = d.id 
    and d.NEXT_TEST_INT_ID = t.id  and t.TEST_INTERNAL_EXTERNAL = 0 and r.NAME like '%Interne%' and r.NAME not like '%Externe%' 
    and u.deadline <> d.NEXT_TEST_DATE_INTERNAL and u.DEADLINE > sysdate 
    AND BSRMD_REMINDER.ID=r.ID
    GROUP BY r.ID,t.TEST_INTERNAL_EXTERNAL 
);

**请再次检查所有这些连接是否真的有必要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。