请帮我构建选择SQL,我的标准是
用户
USER_ID删除
111个1
222个0
333 1
tab1
USER_ID删除
111个1
222个0
333 0
tab2
USER_ID删除
111个1
222个0
333 1
tab3
USER_ID删除
111个1
222个1
333 0
对我而言,情况是如果删除了用户表中的user_id(删除= 1),则应删除tab1,tab2和tab3中的所有引用记录(删除= 1)。
我需要找出用户表中删除(删除= 1)的user_ids,但是他们的记录在tab1,tab2或tab3表中都保持活动状态(已删除= 0)
例如: user_id:111被删除,其所有其他表中的数据也被删除。但是user_id:333已被删除,但其在tab1和tab3中的记录仍然有效。我需要找出这些user_id,比如333。
请帮我构建select sql
答案 0 :(得分:0)
试试这个
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)
答案 1 :(得分: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);
OUTPUT将是:
USER_ID
----------
333