我有一个包含许多历史条目的表,其中包含客户ID.
有一个单独的客户表.有时会删除一些客户条目.
是否有一种简单的方法,在不循环遍历每个历史记录条目的情况下,删除历史记录表中客户ID不再存在的所有行,因为客户行已被删除?
hex*_*mal 30
delete from history_table where customer_id not in (select customer_id from customers)
Run Code Online (Sandbox Code Playgroud)
你的意思是这样的吗?
Ais*_*ina 11
DELETE h.* FROM history h
LEFT JOIN customer c ON h.customer_id = c.id
WHERE c.id IS NULL
Run Code Online (Sandbox Code Playgroud)
我正在从头顶打字,但你有希望得到这个想法.
怎么样:
DELETE FROM history_table
WHERE customer_id NOT IN (SELECT customer_id FROM customer);
Run Code Online (Sandbox Code Playgroud)
您可以使用级联与外键来实现此目的.在以下示例中,每次从A中删除行或更改A中的A_ID时,此更改将自动反映在表B中.您可以在MySql文档中阅读有关外键的更多信息.
CREATE TABLE A(
A_ID INT,
PRIMARY_KEY(A_ID)
) TYPE=InnoDB;
CREATE TABLE B(
B_ID INT,
A_ID INT,
CONSTRAINT FK_B_A FOREIGN KEY REFERENCES A(A_ID) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY_KEY(B_ID, A_ID)
) TYPE=InnoDB;
Run Code Online (Sandbox Code Playgroud)