sql - 根据 SQL 上的条件删除结果
问题描述
数据集上下文:表有一列SEX_CODE
可以是M、F、B(已婚,所以名字是两个名字的组合)。所以 ahousehold_ID
可以有三个重复项,都具有不同SEX_CODE
的 ',并分为 3 个单独的sub_id
。(还有'U'-unknown,但那些从来没有重复household_ID
,所以我们可以把它们排除在外)
目标:我需要处理以下情况:
如果 a
household_ID
与SEX_CODE
='M' 和 'F' 重复,则返回这两行。如果 a
household_ID
与SEX_CODE
='B' 和 'F'/'M' 重复,则仅返回 'F'/'M' (或删除 'B')。- 如果 a
household_ID
与SEX_CODE
='B' 和 'F' 和 'M' 重复,则仅返回 'F' 和 'M' (或删除 'B')。
我遇到了几个问题
household_ID
我的主要查询是按and分组,因此如果这些行具有相同的andsub_ID
,我将无法吐出 2 行。household_ID
sub_ID
我不知道如何分成3种情况。我可以使用
CASE
and分成两种情况COUNT
。
我觉得我需要以完全不同的方式来处理它,而不是按组,但我不知道如何按案例分组。
我可以在 Excel 中手动删除它们(突出显示重复>按颜色过滤>过滤 sex_code 'B'>全部删除)但查询将像 60,000+ 行,所以我想知道是否可以在SQL
. 但如果这不可能,请不要担心,我会在 Excel 中完成。
解决方案
假设 - ID == person_ID == home_ID(假设 ID 存在于小提琴中,而 person_ID 和 home_ID 均不存在)。
SELECT id,id_sub,SEX
FROM household hh
WHERE SEX <> 'B'
OR
NOT EXISTS (SELECT 1 FROM household h where h.id=hh.id and ( h.SEX='F' or h.SEX='M') )
ORDER BY id
该查询只获取所有记录,对于那些具有 SEX 'B' 的记录,它会检查表中是否没有具有相同 ID 的 SEX 'F' 或 'M' 的记录。应该注意的是,带有值“U”的记录(在 OP 中未提及),无需多言即可复制。
如果您希望从存在另一个 SEX (F/M) 的 SEX 'B' 表中删除记录 - 这将非常相似:
DELETE FROM household hh
WHERE SEX = 'B'
AND
EXISTS (SELECT 1 FROM household h where h.id=hh.id and ( h.SEX='F' or h.SEX='M') )
随着条件的明显逆转。
推荐阅读
- asp.net-core - 区域的 UrlHelperExtensions.Page 方法
- google-cloud-platform - Cloud Sql Instance重启挂了好几个小时
- html - 如何将我的(html)登录页面和其他页面链接到我的索引页面
- c# - 通过 Graph API 发布到 Facebook 页面时未显示链接预览
- performance - 在 Gitlab 中加快 CI 进程
- reactjs - 我想在真实聊天中做一个聊天记录。在反应
- c - 链表:抛出异常:读取访问冲突。B 是 0xCDCDCDCD
- ios - 根据用户位置绘制折线 [SWIFT]
- command-line-interface - 如何使用 OCI CLI 以 json 格式编写复杂类型?
- ajax - Spring Boot Thymeleaf Ajax 调用