首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从两个表中删除行

从两个表中删除行
EN

Stack Overflow用户
提问于 2012-06-14 22:00:58
回答 3查看 3.6K关注 0票数 2

我正在尝试同时从两个不同的表中删除行。这些表看起来像这样:

代码语言:javascript
运行
复制
TABLE - Value
-----------
ID
Field
<some other stuff...>

TABLE - Srch
-----------
Value_ID
Srch_ID
<some other stuff...>

我尝试从VALUE中删除field等于'SUCCESS‘的所有行,并从SRCH中删除通过value_id链接到VALUE的行。在SRCH中,可以有多个具有相同value_id的行。

这条SQL语句应该是什么样子的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-14 22:25:51

虽然将数据库更改为自动执行此操作是理想的,但前提是这始终是您想要的行为,并且您对数据库具有执行此操作的权限。

否则,特别是如果这是一次性或偶然性的事情,它可以在一组两个简单的查询中完成,一起运行:

代码语言:javascript
运行
复制
Delete from Srch where value_id in (Select ID from value where field='SUCCESS')
Delete from value where field='SUCCESS'

如果这是一个实时系统,您希望将它们作为单个事务的一部分运行,这样您就不会在两个语句之间更新值,而留下孤立或类似的东西。如果使用正确的隔离级别运行,这将是最简单、最简单的方法。

票数 3
EN

Stack Overflow用户

发布于 2012-06-14 22:09:52

我建议在2个表和ON DELETE CASCADE之间使用外键。因此,您只需删除Value中的行,Srch中所有相应的行都将被删除。

您可以将以下约束添加到数据库中:

代码语言:javascript
运行
复制
ALTER TABLE Srch ADD CONSTRAINT
FK_Value_ID FOREIGN KEY(Value_ID)
REFERENCES Value (ID) 
ON DELETE CASCADE;

为了清楚起见(引用自xQbert注释):当一个ID from值被删除时,“级联总是会发生”。

票数 5
EN

Stack Overflow用户

发布于 2012-06-14 22:20:41

或者使用PL/SQL但没有外键的更复杂的解决方案:

代码语言:javascript
运行
复制
DEFINE 
v_success_count number;
v_val_id number;
BEGIN

SELECT INTO v_success_count count(*) FROM


WHILE (select count(*) FROM value WHERE field = 'SUCCESS') > 0
LOOP
    SELECT value_id INTO val_id FROM value WHERE field = 'SUCCESS' AND rownum = 1;

    DELETE FROM srch WHERE value_id = v_val_id;

    DELETE FROM value WHERE field = 'SUCCESS' AND rownum = 1;
END LOOP
COMMIT;
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11034767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档