在数据库表A的汇总中有一些以相同前缀开头的数据,例如fooABC和foobooABC。我们的应用程序有多个配置文件,每个配置文件都有一个数据库。这些数据的其余部分在一个数据库之间会有所不同。我有一个查询,用于选择以“ foo”开头而不是“ fooboo”开头的数据。
select *
from (select *
from A a
where a.field like 'foo%') a1
where a1.field not like 'fooboo%'
尽管有效,但我想知道这是否是更好的方法,例如是否进行非嵌套查询。
答案 0 :(得分:1)
只需使用AND
,以便行匹配两个条件
select *
from A a
where a.field like 'foo%'
and a.field not like 'fooboo%'
答案 1 :(得分:1)
您认为如果首先选择foo%,则仅在这些记录上检查fooboo%的条件,而不必在整个表上检查。但这更好还是不好?我建议您让DBMS决定最好的方法,并简单地询问您要查看哪些数据。
这就是SQL的意义:告诉DBMS您想看什么,而不是如何做。
select *
from A
where field like 'foo%'
and field not like 'fooboo%';
因此,您的查询非常易于理解(易于维护)。无论如何,一个好的DBMS可能会为两个查询提出相同的执行计划。