连接的SQL条件

时间:2018-04-23 10:50:55

标签: sql oracle

我创建了一个SQL查询(Oracle),它是2个表的连接,此表包含与用户加入或离开特定实例相关的条目。

所以,让我们说这个表看起来像:

+------------+--------+
| User_ID    | State  |
+------------+--------+
| 101        | Joined |
+------------+--------+
| 102        | Joined |
+------------+--------+
| 101        |   Left |
+------------+--------+

如您所见,用户101已加入,但随后离开。是否有可能以某种方式指定如果用户离开,则从表中删除与该用户相关的所有条目(用户ID是唯一的),但是如果只有条目说该用户已加入,则用户将保留在表中?

我是SQL的新手,如果问题缺少一些细节我很抱歉,请随时要求澄清。

3 个答案:

答案 0 :(得分:2)

要删除与已离开的用户相关的记录,您可以尝试以下操作:

DELETE FROM mytable m1
 WHERE EXISTS ( SELECT 1 FROM mytable m2
                 WHERE m2.user_id = m1.user_id
                   AND m2.state = 'Left' );

或者(这可能会使事情变得更清楚):

DELETE FROM mytable m1
 WHERE m1.user_id IN ( SELECT m2.user_id
                         FROM mytable m2
                        WHERE m2.state = 'Left' );

希望这有帮助。

答案 1 :(得分:1)

您可以获取状态为“左”的ID列表,然后删除这些ID

dev_package:
    modules:
        __init__.py
        utils:
            __init__.py
            smtp.py
            db.py
        api:
            __init__.py
            some_api_client.py
    test:
        some_test.py
        some_other_test.py

答案 2 :(得分:0)

您可以这样做:

select t.*
from t
where not exists (select 1 from t t2 where t2.id = t.id and t.state = 'Left');

您可以轻松将其转为delete

delete t
        where exists (select 1 from t t2 where t2.id = t.id and t.state = 'Left');