Example 1
Delete activity logs that belong to disabled users
Logs for user 2 are deleted because that user is disabled. The active user's log remains.
Engine-specific syntax
Setup
CREATE TABLE users (id INT, status VARCHAR(20));
CREATE TABLE activity_logs (id INT, user_id INT, message VARCHAR(50));
INSERT INTO
users
VALUES
(1, 'active'),
(2, 'disabled');
INSERT INTO
activity_logs
VALUES
(10, 1, 'login'),
(11, 2, 'login'),
(12, 2, 'export');SQL
DELETE l
FROM
activity_logs l
JOIN users u ON u.id = l.user_id
WHERE
u.status = 'disabled';
SELECT
id,
user_id,
message
FROM
activity_logs
ORDER BY
id;| id | user_id | message |
|---|---|---|
| 10 | 1 | login |
Engine-specific syntax
Setup
CREATE TABLE users (id INT, status VARCHAR(20));
CREATE TABLE activity_logs (id INT, user_id INT, message VARCHAR(50));
INSERT INTO
users
VALUES
(1, 'active'),
(2, 'disabled');
INSERT INTO
activity_logs
VALUES
(10, 1, 'login'),
(11, 2, 'login'),
(12, 2, 'export');SQL
DELETE FROM activity_logs l USING users u
WHERE
u.id = l.user_id
AND u.status = 'disabled';
SELECT
id,
user_id,
message
FROM
activity_logs
ORDER BY
id;| id | user_id | message |
|---|---|---|
| 10 | 1 | login |
Engine-specific syntax
Setup
CREATE TABLE users (id INT, status TEXT);
CREATE TABLE activity_logs (id INT, user_id INT, message TEXT);
INSERT INTO
users
VALUES
(1, 'active'),
(2, 'disabled');
INSERT INTO
activity_logs
VALUES
(10, 1, 'login'),
(11, 2, 'login'),
(12, 2, 'export');SQL
DELETE FROM activity_logs
WHERE
EXISTS (
SELECT
1
FROM
users
WHERE
users.id = activity_logs.user_id
AND users.status = 'disabled'
);
SELECT
id,
user_id,
message
FROM
activity_logs
ORDER BY
id;| id | user_id | message |
|---|---|---|
| 10 | 1 | login |
SQLite uses EXISTS instead of joined DELETE syntax.