SQL查找2个查询之间的差异

时间:2017-03-16 19:25:33

标签: sql sql-server sql-server-2012

我有两个不同逻辑的查询,我试图找到两者之间的区别。

例如:

  • 查询1:选择所有带元音的名称,总计:10
  • 查询2:选择以元音结尾的所有名称,总计:2

我如何在两个查询之间找到剩余的8个值?我尝试过以下但仍然没有运气:

Q1 except Q2 
UNION
Q2 except Q1

4 个答案:

答案 0 :(得分:3)

(Query for Selecting all the names with vowels)

EXCEPT

(Query for Selecting all the names ending in vowels)

答案 1 :(得分:1)

另一个选择是使用所需的where子句编写查询。

select *
from t
where name like '%[aeiou]%' 
  and name not like '%[aeiou]'

使用两个common table expressionsnot exists()的另一个选项:

with q1 as (
/* query 1 */
)
, q2 as (
/* query 2 */
)
select *
from q1
where not exists (
  select 1 
  from q2
  where q1.name = q2.name
)

答案 2 :(得分:0)

根据您的描述,查询1的结果必须包含query2的重新包含。 所以你可以使用

Q1 EXCEPT Q2

或Q1不存在Q2的情况

答案 3 :(得分:0)

如果您要查询大数据,则EXCEPT成本很高。所以你可以选择LEFT OUTER JOIN

select * from Q1 left outer join Q2 on Q1.ID=Q2.ID where Q2.ID IS NULL