Select sql 具有多种条件组合
Select sql with multiple combinations of criteria
请帮助我构建 select SQL 我的标准是
用户
user_id deleted
111 1
222 0
333 1
tab1
user_id deleted
111 1
222 0
333 0
tab2
user_id deleted
111 1
222 0
333 1
tab3
user_id deleted
111 1
222 1
333 0
我的情况是,如果用户 table 中的一个 user_id 被删除(deleted=1),那么它在 tab1、tab2 和 tab3 中的所有引用记录都应该被删除(deleted=1) .
我需要找出用户 table 中的 user_ids 被删除 (deleted=1) 但他们的记录在 tab1、tab2 或 tab3 tables (删除=0)
例如:
user_id:111 被删除,它在所有其他 table 中的数据也被删除。但是 user_id:333 被删除了,但它在 tab1 和 tab3 中的记录仍然有效。我需要找出这些 user_id,比如 333.
请帮我搭建selectsql
这样试试
SELECT USER_ID FROM USER AS A
WHERE DELETED = 1
AND EXISTS (SELECT 1 FROM TAB1 AS B WHERE A.USER_ID = B.USER_ID AND B.DELETED = 0)
OR EXISTS (SELECT 1 FROM TAB2 AS B WHERE A.USER_ID = B.USER_ID AND B.DELETED = 0)
OR EXISTS (SELECT 1 FROM TAB3 AS B WHERE A.USER_ID = B.USER_ID AND B.DELETED = 0)
试试这个:
WITH x AS (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 0 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 1 AS deleted FROM dual ),
y as (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 0 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 0 AS deleted FROM dual ),
z as (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 0 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 1 AS deleted FROM dual ),
w as (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 1 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 1 AS deleted FROM dual )
SELECT x.user_id FROM x, y, z, w
WHERE x.user_id = y.user_id AND
x.user_id = z.user_id AND
x.user_id = w.user_id AND
x.deleted = 1 AND
(x.deleted != y.deleted OR
x.deleted != z.deleted OR
x.deleted != w.deleted);
输出将是:
USER_ID
----------
333
请帮助我构建 select SQL 我的标准是
用户
user_id deleted
111 1
222 0
333 1
tab1
user_id deleted
111 1
222 0
333 0
tab2
user_id deleted
111 1
222 0
333 1
tab3
user_id deleted
111 1
222 1
333 0
我的情况是,如果用户 table 中的一个 user_id 被删除(deleted=1),那么它在 tab1、tab2 和 tab3 中的所有引用记录都应该被删除(deleted=1) .
我需要找出用户 table 中的 user_ids 被删除 (deleted=1) 但他们的记录在 tab1、tab2 或 tab3 tables (删除=0)
例如: user_id:111 被删除,它在所有其他 table 中的数据也被删除。但是 user_id:333 被删除了,但它在 tab1 和 tab3 中的记录仍然有效。我需要找出这些 user_id,比如 333.
请帮我搭建selectsql
这样试试
SELECT USER_ID FROM USER AS A
WHERE DELETED = 1
AND EXISTS (SELECT 1 FROM TAB1 AS B WHERE A.USER_ID = B.USER_ID AND B.DELETED = 0)
OR EXISTS (SELECT 1 FROM TAB2 AS B WHERE A.USER_ID = B.USER_ID AND B.DELETED = 0)
OR EXISTS (SELECT 1 FROM TAB3 AS B WHERE A.USER_ID = B.USER_ID AND B.DELETED = 0)
试试这个:
WITH x AS (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 0 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 1 AS deleted FROM dual ),
y as (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 0 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 0 AS deleted FROM dual ),
z as (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 0 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 1 AS deleted FROM dual ),
w as (SELECT 111 AS user_id , 1 AS deleted FROM dual UNION ALL
SELECT 222 AS user_id, 1 AS deleted FROM dual UNION ALL
SELECT 333 AS user_id , 1 AS deleted FROM dual )
SELECT x.user_id FROM x, y, z, w
WHERE x.user_id = y.user_id AND
x.user_id = z.user_id AND
x.user_id = w.user_id AND
x.deleted = 1 AND
(x.deleted != y.deleted OR
x.deleted != z.deleted OR
x.deleted != w.deleted);
输出将是:
USER_ID
----------
333