SQL Plus如何仅在同一帐户没有两个不同结果时才显示行

Posted

技术标签:

【中文标题】SQL Plus如何仅在同一帐户没有两个不同结果时才显示行【英文标题】:SQL Plus How to only display rows if it does not have two different results for the same account 【发布时间】:2016-05-04 22:25:27 【问题描述】:

我希望有人可以帮助仅显示仅由 user_name = 'system' 修改的帐户

示例表_1

ID
USER_NAME
DATE_TIME
UPDATES

假设我愿意

select * from table_1 where ID='14'
ID        USER_NAME              UPDATES
14         system              deleted record
14         system              updated record
14         system              updated record
14         system              copied record

假设我愿意

select * from table_1 where ID='26'
ID        USER_NAME            UPDATES
26         system              updated record
26         system              deleted record
26         Michael             updated record
26         system              updated record

我基本上是在尝试创建一个查询,如果有除“系统”以外的任何内容,则不显示该 ID 的任何记录。因此,对于上面输出中的示例,我不希望显示任何 ID 26 行(即使是由系统更新的行),因为其中一条记录是由“系统”以外的其他东西更新的。我只希望显示 ID 14,因为所有记录都由 user_name 'system' 更新

最终输出应该类似于 ID 14

【问题讨论】:

【参考方案1】:

如果需要详细信息,请使用 not existsnot in

select t.*
from table_1 t
where not exists (select 1
                  from table_1 tt
                  where tt.id = t.id and tt.user_name <> 'system'
                 );

如果您只想要id,请使用group by

select t.id
from table_1 t
group by t.id
having sum(t.user_name = 'system') = count(*);  -- all rows have `system`

注意:您也可以使用having sum(t.user_name &lt;&gt; 'system') = 0。但是,两者处理 NULL 值的方式略有不同。

【讨论】:

谢谢!第一个查询完美无缺,正是我想要做的。第二个我收到“缺少右括号”错误。 @connollyc4 。 . .第二个应该在 mysql 中工作——因为问题已被标记。但是,它在 Oracle 中不起作用,这是 SQLPlus 建议的。

以上是关于SQL Plus如何仅在同一帐户没有两个不同结果时才显示行的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 仅在条件匹配时选择 [关闭]

减去日期并仅在 SQL 中显示整数

debugger users 是干啥的 有啥作用 没有行吗 他跟administrator 是同一等级吗

App Store 上同一公司的不同开发者帐户

Google Plus 登录帐户选择对话框问题

当同一列中的值不匹配但不同列重复时将返回结果的 SQL 查询