sql - 如果列的所有值都不同于某个字符串,则选择具有相同 id 的行
问题描述
我正在尝试编写一个 sql 查询,但我是这个领域的新手,我需要帮助。我有三个表,并且使用以下查询完成了 2 个内部联接:
select a1.SYS_ID, a1.U_JOURNEY_STATUS, b1.SYS_ID
, b1.U_TICKET_JOURNEY_SYSID
, b1.U_STATUS, c1.SYS_ID, c1.U_TICKET_JOURNEY_SYSID, c1.U_STATUS
from NOCCIA_TICKET_JOURNEY_CONTROL a1 INNER JOIN NOCCIA_AUTOMATION_CONTROL b1
on a1.SYS_ID=b1.U_TICKET_JOURNEY_SYSID
INNER JOIN NOCCIA_MANUAL_EX_CONTROL c1
on b1.U_TICKET_JOURNEY_SYSID=c1.U_TICKET_JOURNEY_SYSID
where ( ( a1.U_JOURNEY_STATUS='In Automation'
OR a1.U_JOURNEY_STATUS='Alarms Cleared' ) )
结果如下:
SYS_ID 是第一张表的主键,而 U_TICKET_JOURNEY_SYS_ID 和 U_TICKET_JOURNEY_SYS_ID1 是第二张和第三张表的外键。但是,我真正想要的是仅选择所有行 U_STATUS 和 U_STATUS_1 与该 SYS_ID 的字符串不同的 SYS_ID。
解决方案
使用count()
. 表data
是您的查询。对于每个条目,由于使用情况而count()
扫描具有相同的行。
子句检查状态是否相同。这样我们扫描整个组的每一行。外部查询删除至少一个条目包含相同状态的组。sys_id
partition
Case when
这里我模拟了样本数据,其中只有 sys_id 115 符合条件:
with data(a_sys_id, a_status, b_sys_id, b_status, c_sys_id, c_status) as (
select 110, 'Auto', 4, 'Closed', 4, 'Closed' from dual union all
select 110, 'Auto', 101, 'Auto', 4, 'Closed' from dual union all
select 115, 'Auto', 17, 'Closed', 21, 'Open' from dual union all
select 115, 'Auto', 21, 'Open', 21, 'Open' from dual union all
select 169, 'Auto', 32, 'Closed', 33, 'Closed' from dual union all
select 169, 'Auto', 33, 'Open', 33, 'Open' from dual union all
select 169, 'Auto', 44, 'Open', 33, 'Auto' from dual union all
select 169, 'Auto', 47, 'Open', 33, 'Closed' from dual)
select a_sys_id, a_status, b_sys_id, b_status, c_sys_id, c_status
from (
select a_sys_id, a_status, b_sys_id, b_status, c_sys_id, c_status,
count(case when a_status = b_status or a_status = c_status then 1 end)
over (partition by a_sys_id) as cnt
from data)
where cnt = 0
A_SYS_ID A_STATUS B_SYS_ID B_STATUS C_SYS_ID C_STATUS
---------- -------- ---------- -------- ---------- --------
115 Auto 17 Closed 21 Open
115 Auto 21 Open 21 Open
推荐阅读
- reactjs - 当我在嵌套路由器页面中时,如何从属于主路由器的链接在嵌套路由器页面之间导航
- python - 如何抓取没有引用或名称属性的项目?
- python - 如果我的网络无论我如何训练它或扩展它的容量都永远不会过拟合,这意味着什么?
- arrays - 如何将变量从 axios 获取请求传递给 vuejs 中的子组件?
- c++ - 从 gurobi c++ 中的模型中删除约束
- python - 如何在 python 中对 AZ 以外的 UTF-8 进行加密?
- node.js - Node.js:将图像作为 base64 传递给带有 spawn 的 python
- javascript - 如何在没有标签的chart.js2中绘制垂直线
- node.js - 角色认证用户/管理员
- ios - 如何使水印在 MacOS 中始终漂浮在屏幕上方