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 exists
或 not 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 <> 'system') = 0
。但是,两者处理 NULL
值的方式略有不同。
【讨论】:
谢谢!第一个查询完美无缺,正是我想要做的。第二个我收到“缺少右括号”错误。 @connollyc4 。 . .第二个应该在 mysql 中工作——因为问题已被标记。但是,它在 Oracle 中不起作用,这是 SQLPlus 建议的。以上是关于SQL Plus如何仅在同一帐户没有两个不同结果时才显示行的主要内容,如果未能解决你的问题,请参考以下文章