从查询中获取额外的值

时间:2018-02-13 17:36:50

标签: sql oracle oracle-sqldeveloper

我只是在学习SQL。我对如何获得以下结果感到困惑:

select count(*) 
from TABLE_NAME 
where column1 like '%mystring%' and column2 = 'mystring';

输出:

120

如果我这样做:

select count(*) 
from TABLE_NAME 
where column1 like '%mystring%'

我得到了结果:122

如何在运行第二个查询时获得两个额外的结果?

我在w3schools学习了基础知识并在实施时遇到了问题。这里有任何帮助:)

3 个答案:

答案 0 :(得分:2)

您有2条记录,其中column1类似于'%mystring%'并且没有column2 =' mystring'。 在第一个查询中,这些记录被过滤掉,而在第二个查询中则没有。 如果您想了解这些记录有助于您理解的内容,请运行以下代码:

SELECT *
FROM TABLE_NAME
WHERE column1 LIKE '%mystring%'
AND column2 != 'mystring'

答案 1 :(得分:1)

这将导致2"缺失"记录:

select count(*) from TABLE_NAME where column1 like '%mystring%' and  nvl(column2,'-')<>'mystring';

在这2条记录中column2不等于'mystring'null

这里我使用nvl来处理可能的空值(nvl function)。

另一种方法是

select count(*) from TABLE_NAME where column1 like '%mystring%' and  (column2<>'mystring' or column2 is null);

答案 2 :(得分:0)

您的问题可以概括为:

with t as
(
 select 'abmystringcd' column1, 'abmystringcd' column2 from dual union all
 select 'abmystringcd' column1, 'mystring'     column2 from dual union all
 select 'abmystringcd' column1, 'mystring'     column2 from dual union all
 select 'abmystringcd' column1, 'mystring'     column2 from dual union all
 select 'abmystringcd' column1, 'mystring'     column2 from dual union all
 select 'abmystringcd' column1, 'mystring'     column2 from dual
)  
  select count(1) cnt from t where column1 like '%mystring%' union all
  select count(1) cnt from t where column2   =   'mystring';

 CNT
 ----
  6  -- [ # of strings including "mystring" ]
  5  -- [ # of exact matches for "mystring" ]