sql - 如何在 Oracle SQL 中从 JDBC 约束外键的 2 个表中删除
问题描述
基本上,我需要知道 SQL 查询来执行 JDBC 编码。我用以下查询制作了我的表:
CREATE TABLE MASTER
(
ROOM_ID NUMBER NOT NULL PRIMARY KEY,
MARKET VARCHAR2(3 CHAR) NOT NULL,
MODIFIED_DATE DATE,
MODIFIED_BY VARCHAR2(60 CHAR)
);
CREATE TABLE FEATURES
(
MASTER_ROOM_ID NUMBER NOT NULL,
ELEMENT NUMBER NOT NULL,
MODIFIED_DATE DATE,
MODIFIED_BY VARCHAR2(60 CHAR),
CONSTRAINT FK_MASTER_FEATURES
FOREIGN KEY (MASTER_ROOM_ID) REFERENCES MASTER (ROOM_ID)
ON DELETE CASCADE
);
然后尝试删除为:
DELETE MASTER FEATURES
JOIN FEATURES ON room_id = master_room_id
WHERE room_id = master_room_id;
这不是一个有效的查询。怎么做?
更新的问题:它在删除级联。当我删除时delete from master where market = 'xxx';
它只删除主表行。不是来自功能。有人评论说我必须先从 Features 表中删除。但问题是我不能先从特征表中删除。我想被市场删除。对于功能表,我只知道 MASTER_ROOM_ID,它是功能表的外键。那么我怎样才能写一个查询先从特征表中删除呢?请告诉我怎么做?
解决方案
如果 FK 确实是使用 ON DELETE CASCADE 创建的,那么从 MASTER中删除将从这里的特征表演示中删除
如果 FK 不是使用 ON DELETE CASCADE 创建的,那么只要至少有一个特性在此处演示引用它,master 上的删除就会失败
在这种情况下,您需要features
使用子查询从第一次删除以找到正确的行:
delete from features
where master_room_id in (select room_id
from master
where marked = 'm1');
然后你可以从主表中删除:
delete from master
where marked = 'm1';
推荐阅读
- vue.js - 基本 vue.js 上的 dist 文件夹
- pandas - Pandas - 从 Skewness 和 Kurtois 打印到一个 df
- python - 寻找不同形状的 Numpy 数组之间的差异?
- c++ - Boost 库和应用程序中的不同 C++ 重命名名称
- python-3.x - 如何根据日期时间约束从另一个数据框中提取行?
- python - ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。&
- javascript - 如何使用 post 方法 express.js 中的变量
- html - 在浏览器中加载时不显示 JPEG 的背景
- visual-c++ - 为什么 vc++ 2017 显示错误而不是 C4297 的警告?
- algorithm - 检查有限二维数组是否可以形成对角线的最有效方法