我有一张表,其中包含许多历史记录,这些记录包含客户ID。
还有一个单独的客户表。偶尔会删除一些客户条目。
是否有一种简单的方法,可以在不循环遍历每个历史记录的情况下,删除所有历史表中的行,其中客户ID不存在,因为已删除客户行?
我有一张表,其中包含许多历史记录,这些记录包含客户ID。
还有一个单独的客户表。偶尔会删除一些客户条目。
是否有一种简单的方法,可以在不循环遍历每个历史记录的情况下,删除所有历史表中的行,其中客户ID不存在,因为已删除客户行?
delete from history_table where customer_id not in (select customer_id from customers)
你的意思是类似于这样吗?
DELETE h.* FROM history h
LEFT JOIN customer c ON h.customer_id = c.id
WHERE c.id IS NULL
我是根据我的理解打字的,但是希望你能明白我的意思。
删除语法文档DELETE FROM history_table
WHERE customer_id NOT IN (SELECT customer_id FROM customer);
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;
DELETE FROM CUSTOMER_HISTORY CH
WHERE NOT EXISTS (SELECT 1 FROM CUSTOMER C WHERE C.CUSTOMER_ID = CH.CUSTOMER_ID)