如何在 Oracle SQL 中删除外键约束为 JDBC 的 2 个表
How to delete in Oracle SQL from 2 tables where foreign key constraint by JDBC
基本上,我需要知道 SQL 查询才能执行 JDBC 编码。我使用以下查询创建了 table:
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';
时,它只会删除主 table 行。不是来自功能。有人评论说我必须先从功能 table 中删除。但问题是我真的不能先从功能 table 中删除。我想按市场删除。我对于功能 table 我只知道 MASTER_ROOM_ID,它是功能 table 的外键。那么我如何编写查询以先从特征 table 中删除呢?请告诉我怎么做?
如果 FK 确实是使用 ON DELETE CASCADE 创建的,那么从 MASTER 中删除 将从特征中删除 table demo here
如果 FK 不是使用 ON DELETE CASCADE 创建的,那么只要至少有一个功能引用它,主控上的删除就会失败 demo here
在这种情况下,您需要先使用子查询从 features
中删除以找到正确的行:
delete from features
where master_room_id in (select room_id
from master
where marked = 'm1');
然后就可以从master上删除了table:
delete from master
where marked = 'm1';
基本上,我需要知道 SQL 查询才能执行 JDBC 编码。我使用以下查询创建了 table:
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';
时,它只会删除主 table 行。不是来自功能。有人评论说我必须先从功能 table 中删除。但问题是我真的不能先从功能 table 中删除。我想按市场删除。我对于功能 table 我只知道 MASTER_ROOM_ID,它是功能 table 的外键。那么我如何编写查询以先从特征 table 中删除呢?请告诉我怎么做?
如果 FK 确实是使用 ON DELETE CASCADE 创建的,那么从 MASTER 中删除 将从特征中删除 table demo here
如果 FK 不是使用 ON DELETE CASCADE 创建的,那么只要至少有一个功能引用它,主控上的删除就会失败 demo here
在这种情况下,您需要先使用子查询从 features
中删除以找到正确的行:
delete from features
where master_room_id in (select room_id
from master
where marked = 'm1');
然后就可以从master上删除了table:
delete from master
where marked = 'm1';