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