Example 1
Delete orders whose customer does not exist
The delete removes orders 102 and 104 because no customer row matches their customer_id. Orders 101 and 103 remain because they still have valid parent rows. The final SELECT verifies the surviving child rows before a foreign key is added or re-enabled.
CREATE TABLE customers (id INT, name VARCHAR(50));
CREATE TABLE orders (id INT, customer_id INT, total INT);
INSERT INTO
customers
VALUES
(1, 'Ada'),
(2, 'Bob');
INSERT INTO
orders
VALUES
(101, 1, 50),
(102, 9, 75),
(103, 2, 20),
(104, 8, 40);DELETE o
FROM
orders o
LEFT JOIN customers c ON c.id = o.customer_id
WHERE
c.id IS NULL;
SELECT
id,
customer_id,
total
FROM
orders
ORDER BY
id;| id | customer_id | total |
|---|---|---|
| 101 | 1 | 50 |
| 103 | 2 | 20 |
CREATE TABLE customers (id INT, name VARCHAR(50));
CREATE TABLE orders (id INT, customer_id INT, total INT);
INSERT INTO
customers
VALUES
(1, 'Ada'),
(2, 'Bob');
INSERT INTO
orders
VALUES
(101, 1, 50),
(102, 9, 75),
(103, 2, 20),
(104, 8, 40);DELETE FROM orders o
WHERE
NOT EXISTS (
SELECT
1
FROM
customers c
WHERE
c.id = o.customer_id
);
SELECT
id,
customer_id,
total
FROM
orders
ORDER BY
id;| id | customer_id | total |
|---|---|---|
| 101 | 1 | 50 |
| 103 | 2 | 20 |
CREATE TABLE customers (id INT, name VARCHAR(50));
CREATE TABLE orders (id INT, customer_id INT, total INT);
INSERT INTO
customers
VALUES
(1, 'Ada'),
(2, 'Bob');
INSERT INTO
orders
VALUES
(101, 1, 50),
(102, 9, 75),
(103, 2, 20),
(104, 8, 40);DELETE FROM orders
WHERE
NOT EXISTS (
SELECT
1
FROM
customers c
WHERE
c.id = orders.customer_id
);
SELECT
id,
customer_id,
total
FROM
orders
ORDER BY
id;| id | customer_id | total |
|---|---|---|
| 101 | 1 | 50 |
| 103 | 2 | 20 |
The cleanup intent is the same, but joined-delete syntax differs by engine.