首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL忽略不匹配的列

SQL忽略不匹配的列
EN

Stack Overflow用户
提问于 2021-04-08 10:19:57
回答 2查看 63关注 0票数 1

我正在尝试开发一个对表执行select操作的存储过程。存储过程有4个输入: Input1、Input2、Input3、Input4。

表有4列: Col1、Col2、Col3、Col4。

要求是如果所有选择都没有匹配,我们需要忽略它并选择pick next one:

使用案例:

代码语言:javascript
运行
复制
Select * 
from table 
where Col1=Input1 
  and Col2=Input2 
  and Col3=Input3 
  and Col4=Input4;

如果由于Col2不等于Input2而导致条件没有返回,select需要忽略它,并尝试匹配其他条件,如:

代码语言:javascript
运行
复制
Select * 
from table 
where Col1=Input1 
  and Col3=Input3 
  and Col4=Input4;

它应该是这样,直到响应的最后一个可能选项:

代码语言:javascript
运行
复制
Select * 
from table 
where Col1=Input1;

如果有办法请协助,并提前表示感谢。

EN

Stack Overflow用户

发布于 2021-04-08 16:54:28

正如评论中提到的,这个问题有点含糊,所以我担心任何答案也会有点含糊。你可以这样做:

代码语言:javascript
运行
复制
select top 1 *,
case when Coll=input1 then 1 else 0 end as match1,
case when Col2=input2 then 1 else 0 end as match2,
case when Col3=input3 then 1 else 0 end as match3,
case when Col4=input4 then 1 else 0 end as match4
from table
order by match1+match2+match3+match4 desc

这是假设SQL服务器作为DBMS (例如,如果是Oracle,您可能需要使用LIMIT而不是TOP ),并且我还假设列在匹配方面具有相同的权重。此外,我假设您只需要一个最佳匹配,如果不是,您可能需要对顶部进行一些更改和/或使用where子句。最后,如果您的列和/或输入可以为空,则可能需要使用isnull()。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66996503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档