sql查询能不能查出具体哪个结果没符合查询条件?

时间:2023-02-09 22:26:35
比如我一个sql语句里面好十几个条件,一次性把sql执行完后出来的结果是都符合条件的

但是日志那里又必须为哪些条件没符合做个记录

不知道能不能实现的?总不可能事后在一个个条件去反查,十几个太恐怖了

希望知道的给我个思路谢谢

16 个解决方案

#1


你的是比较特殊支持下吧

#2


写一个SQL查询不符合条件的,WHERE条件跟你符合语句的条件相反。 

#3


select *  from tb wherenot exists(select * from tb where conditions1='tiaojian'...)...

#4


引用 3 楼  的回复:
SQL code
select *  from tb wherenot exists(select * from tb where conditions1='tiaojian'...)...


一个条件是可以这样,但十几个呢?需要精确到具体哪个条件的呢

#5


多少个都是一样的
select * from  tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...

#6


引用 5 楼  的回复:
多少个都是一样的
select * from  tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...


谢谢!except是取差集,但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

#7


你的意思是要找出每条不符合条件的结果,所缺少的是那个where条件而被剔除的?

#8


引用 6 楼  的回复:
引用 5 楼 的回复:

多少个都是一样的
select * from tb
except
select * from tb where 条件1 and 条件2 and 条件3 and ...


谢谢!except是取差集,但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

那你就

select * from tb 
except
select * from tb where 条件1 看看结果
然后再
select * from tb 
except
select * from tb where 条件1 and 条件2 比较两次的结果集做比对或嵌套查询

#9



;with cet as(select * from tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...)
select case when  条件1 then '' esle '条件1' end +
       case when  条件2 then '' esle '条件2' end +
...  as 缺少的条件 from cet

#10


where子句里,所有原来的条件取反向的,然后and换成or。
比如col1>3就换成col1<=3。

#11


但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

这个需求有些难办哦

#12


引用 11 楼  的回复:
但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

这个需求有些难办哦


是的呢,我都块炸了,确实不好弄

哎,再试试9l的办法,不行就结贴算了

#13


要知道 某一行因为什么条件 不满足 而没有被 筛选出来,还要做标记,
做一个临时表,放入不满足条件的 数据,再增加一个 标记列
1个条件一个条件的查询?这样可明确知道是哪个条件不满足,然后修改标记列?
不过这样的话,很麻烦,效率也成问题

#14


引用 13 楼  的回复:
要知道 某一行因为什么条件 不满足 而没有被 筛选出来,还要做标记,
做一个临时表,放入不满足条件的 数据,再增加一个 标记列
1个条件一个条件的查询?这样可明确知道是哪个条件不满足,然后修改标记列?
不过这样的话,很麻烦,效率也成问题


确实是的.效率非常成问题..郁闷呐

#15


你标记查询到的,跟标记没有查询到的不是一样的效果吗?
那你何不就利用你的查询条件,直接更新表查询到的数据对应的字段?

#16


引用 9 楼  的回复:
SQL code

;with cet as(select * from tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...)
select case when  条件1 then '' esle '条件1' end +
       case when  条件2 then '' esle '条件2' end +
...  ……


经过测试这个方案特别好,真是非常感谢你!

#1


你的是比较特殊支持下吧

#2


写一个SQL查询不符合条件的,WHERE条件跟你符合语句的条件相反。 

#3


select *  from tb wherenot exists(select * from tb where conditions1='tiaojian'...)...

#4


引用 3 楼  的回复:
SQL code
select *  from tb wherenot exists(select * from tb where conditions1='tiaojian'...)...


一个条件是可以这样,但十几个呢?需要精确到具体哪个条件的呢

#5


多少个都是一样的
select * from  tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...

#6


引用 5 楼  的回复:
多少个都是一样的
select * from  tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...


谢谢!except是取差集,但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

#7


你的意思是要找出每条不符合条件的结果,所缺少的是那个where条件而被剔除的?

#8


引用 6 楼  的回复:
引用 5 楼 的回复:

多少个都是一样的
select * from tb
except
select * from tb where 条件1 and 条件2 and 条件3 and ...


谢谢!except是取差集,但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

那你就

select * from tb 
except
select * from tb where 条件1 看看结果
然后再
select * from tb 
except
select * from tb where 条件1 and 条件2 比较两次的结果集做比对或嵌套查询

#9



;with cet as(select * from tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...)
select case when  条件1 then '' esle '条件1' end +
       case when  条件2 then '' esle '条件2' end +
...  as 缺少的条件 from cet

#10


where子句里,所有原来的条件取反向的,然后and换成or。
比如col1>3就换成col1<=3。

#11


但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

这个需求有些难办哦

#12


引用 11 楼  的回复:
但是我的需求是想取哪个条件没符合才造成没筛选出来,我要查出的是条件而不是集合呢

这个需求有些难办哦


是的呢,我都块炸了,确实不好弄

哎,再试试9l的办法,不行就结贴算了

#13


要知道 某一行因为什么条件 不满足 而没有被 筛选出来,还要做标记,
做一个临时表,放入不满足条件的 数据,再增加一个 标记列
1个条件一个条件的查询?这样可明确知道是哪个条件不满足,然后修改标记列?
不过这样的话,很麻烦,效率也成问题

#14


引用 13 楼  的回复:
要知道 某一行因为什么条件 不满足 而没有被 筛选出来,还要做标记,
做一个临时表,放入不满足条件的 数据,再增加一个 标记列
1个条件一个条件的查询?这样可明确知道是哪个条件不满足,然后修改标记列?
不过这样的话,很麻烦,效率也成问题


确实是的.效率非常成问题..郁闷呐

#15


你标记查询到的,跟标记没有查询到的不是一样的效果吗?
那你何不就利用你的查询条件,直接更新表查询到的数据对应的字段?

#16


引用 9 楼  的回复:
SQL code

;with cet as(select * from tb 
except
select * from tb where 条件1 and 条件2 and 条件3 and ...)
select case when  条件1 then '' esle '条件1' end +
       case when  条件2 then '' esle '条件2' end +
...  ……


经过测试这个方案特别好,真是非常感谢你!