SQL:具有优先级的where子句

SQL:具有优先级的where子句,sql,Sql,我想用where子句编写一个select查询,它有两个条件 select distinct user_name from table1 where column1 = 'AAAA' or is null 如果同时找到AAAA和null的记录,我想优先考虑AAAA。 怎么做?只是 select distinct user_name from table1 where column1 = 'AAAA' or column1 is null 仅当相应的AAAA不存在时,才考虑“null”条目: 在

我想用where子句编写一个select查询,它有两个条件

select distinct user_name from table1 where column1 = 'AAAA' or is null
如果同时找到AAAA和null的记录,我想优先考虑AAAA。 怎么做?

只是

select distinct user_name from table1 where column1 = 'AAAA' or column1 is null

仅当相应的AAAA不存在时,才考虑“null”条目:

在哪里。。。或column1为null且不存在从表1中选择*作为内部,其中inner.user\u name=outer.user\u name和inner.column1='AAAA'

使用EXCEPT的变体更接近RA风格的思维方式,但可能会失败,因为这里使用的是NULL

编辑


这个答案只适用于需要从行中获取更多属性而不仅仅是用户名的情况,并且这些属性必须与为结果集保留的行精确匹配。

如果同时找到AAAA和null的记录,这意味着什么。优先考虑AAAA

一种解释是返回AAAA记录。如果不存在,则选择NULL:


您是否正在寻找ORDER BY?添加一些示例表数据和预期结果。作为格式化文本,而不是图像。如果两个记录的结果完全相同。为什么其中一行要优先显示另一行?由于您只显示用户名,因此无法在结果中区分这两行,因为这两行的用户名都是相同的。请回答您的问题并添加一些内容以及基于该数据的预期输出。请你的问题-不要在评论中发布代码或附加信息。很好…你能为相同的内容编写准确的查询吗…外部是什么?不,很抱歉,不这样做。我有一个相当严格的政策,就是不提供完整的结果。”“outer”是您必须在最外层为表1引入的别名,请选择您当前已有的别名,例如选择。。。从表1中可以看出,在联合后选择“所有风险”最终都是空的。。。methinks@ErwinSmout . . . 仅当存在AAAA值时。如果没有AAAA值,那么它将为整个查询生成结果集。但在我看来,一个AAAA值将从联盟的第二部分中删除所有用户名,而不管出现在手边AAAA行中的用户名是什么。@ErwinSmout。这是正确的。这就是我对这个问题的解释,很公平。这个问题确实为这种解释留下了足够的空间。但这与OP在问题本身下的第一个评论并不一致。
select distinct user_name
from table1
where column1 = AAAA
union all
select distinct user_name
from table1
where column1 is null and (not exists select 1 from table1 where column1 = AAAA);