首页 > 解决方案 > 通过基于 sql 中的其他一些 coumn 有条件地删除具有相同列值的其他记录,基于列选择唯一记录

问题描述

我正在开发一个使用 Room 持久性库的 Android 应用程序。在其中一个表(房间实体)中,我有一种情况,我想通过有条件地删除基于其他列具有相同列值的其他记录来基于列选择唯一记录。

考虑下表作为基础。

S_ID 地位
1 待办的
1 被拒绝
3 得到正式认可的
4 得到正式认可的
5 待办的
6 被拒绝
7 被拒绝

SQL 查询的预期结果,Rejected'如果它的 S_ID 与另一个“待定”状态记录冲突,我希望从结果中删除具有“状态”的记录

S_ID 地位
1 待办的
3 得到正式认可的
4 得到正式认可的
5 待办的
6 被拒绝
7 被拒绝

到目前为止我所尝试的:

select DISTINCT s_id OR s_id = 0, * from TABLE1

标签: androidsqlandroid-room

解决方案


我认为您可以尝试以下查询:

SELECT * FROM table1 WHERE table1.S_ID in (SELECT S_ID FROM table1 GROUP BY S_ID HAVING COUNT(S_ID)>0) and table1.[status]<>'Rejected'

编辑:

SELECT table1.S_ID, 
(select Alias.[Status] from Table1 Alias where Alias.S_ID=table1.S_ID  
and ((COUNT(table1.S_ID)>1 and Alias.[Status]<>'Rejected') or COUNT(table1.S_ID)=1) 
) as [Status]
FROM table1 GROUP BY S_ID HAVING COUNT(S_ID)>0

推荐阅读