选择查询以获取与SQL中的where条件匹配但不匹配的数据

时间:2018-12-27 10:54:05

标签: sql sql-server

  • 如果一个表中总共有1000条记录
  • 我总共需要获得500个匹配多个条件的行
  • 在N个条件中,一个条件(A)就像一个可选条件
  • 如果只有50条记录符合所有N个条件,则600条记录   符合所有N-1个条件(A除外)的记录
  • 那么我需要将50 +(600条记录中的450条记录)合成为   来自SQL的500条记录
  • 不建议使用LEFT JOIN,因为我们的桌子有大量的   数据

示例:

enter image description here

  • 从上表中,我需要获取与课程B.Tech相匹配且年龄在25岁以上的4个ID
  • 课程表是可选条件,因此我需要获得ID 1,2,3,5,6
  • 从这6行中,我需要获得5条记录,在这些记录中我不能消除id 5,因为它符合所有条件,而我可以消除其中的任何一条记录,因为其他记录仅符合一项条件

2 个答案:

答案 0 :(得分:2)

您将此条件添加到order by子句中的case表达式中,从而确保您首先获取这些记录:

SELECT    TOP 500 *
FROM      mytable
WHERE     /* conditions */
ORDER BY  CASE WHEN /* optional condition */ THEN 0 ELSE 1 END

答案 1 :(得分:0)

您可以使用联合clause尝试以下查询

create table #temp (id int, Age int, Course varchar(20))
insert into #temp values (1, 25, 'BE'),(2, 30, 'BE'),(3, 40, 'BE'),(4, 22, 'BE'),(5, 25, 'B. Tech'),(6, 27, 'BE')

select Top 4 * from #temp
where age >= 25 
union
select * from #temp
where (Course is null or Course = 'B. Tech')
union
select * from #temp
where age >= 25 OR (Course is null or Course = 'B. Tech')

输出如下所示

id  Age Course
1   25  BE
2   30  BE
3   40  BE
5   25  B. Tech
6   27  BE

您可以在此处找到实况穹顶-Demo Data Matches