我创建了一个SQL查询(Oracle),它是2个表的连接,此表包含与用户加入或离开特定实例相关的条目。
所以,让我们说这个表看起来像:
+------------+--------+
| User_ID | State |
+------------+--------+
| 101 | Joined |
+------------+--------+
| 102 | Joined |
+------------+--------+
| 101 | Left |
+------------+--------+
如您所见,用户101已加入,但随后离开。是否有可能以某种方式指定如果用户离开,则从表中删除与该用户相关的所有条目(用户ID是唯一的),但是如果只有条目说该用户已加入,则用户将保留在表中?
我是SQL的新手,如果问题缺少一些细节我很抱歉,请随时要求澄清。
答案 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');