一张规则表里的数据
====================
A B C D E
====================1 2 * 1 a
* * 3 * b
* 1 * * c其中A、B、C 、D、E为数据表字段名称,其中ABCD字段中的值表示数据,E字段的含义表示对数据的操作
1、2、*等为数据值,abc表示对数据的操作, 一行表示一条记录,即,例子中有三条记录规则如下:
* 表示任意值(包含1、2等),数字代表具体值,
怎样写sql查询输入的数据是否与一条记录相匹配举例输入的数据为
1 2 5 1 则:匹配 1 2 * 1 a
3 1 5 1 则:匹配 * 1 * * c当有多条记录同时匹配时,取*数量少的记录
举例输入
1 2 3 1 同时匹配 1 2 * 1 a 和 * * 3 * b
则最终匹配记录为 1 2 * 1 a ,因为该记录*的数量比较少如果匹配记录的* 数量相同,则根据E字段的值进行排序,返回E字段值为c的记录举例:
输入
1 1 3 1 同时匹配
* * 3 * b 和* 1 * * c且这两条记录*数量相同,则返回E字段值为c的记录,即* 1 * * c如果E字段值为c的记录有多个,则随意返回一条即可如果没有匹配,返回结果集为空即可
这样的查询SQL怎样写?要求不要用存储过程,谢谢各位老大呢!!!!
分不够可以加,谢谢!!
====================
A B C D E
====================1 2 * 1 a
* * 3 * b
* 1 * * c其中A、B、C 、D、E为数据表字段名称,其中ABCD字段中的值表示数据,E字段的含义表示对数据的操作
1、2、*等为数据值,abc表示对数据的操作, 一行表示一条记录,即,例子中有三条记录规则如下:
* 表示任意值(包含1、2等),数字代表具体值,
怎样写sql查询输入的数据是否与一条记录相匹配举例输入的数据为
1 2 5 1 则:匹配 1 2 * 1 a
3 1 5 1 则:匹配 * 1 * * c当有多条记录同时匹配时,取*数量少的记录
举例输入
1 2 3 1 同时匹配 1 2 * 1 a 和 * * 3 * b
则最终匹配记录为 1 2 * 1 a ,因为该记录*的数量比较少如果匹配记录的* 数量相同,则根据E字段的值进行排序,返回E字段值为c的记录举例:
输入
1 1 3 1 同时匹配
* * 3 * b 和* 1 * * c且这两条记录*数量相同,则返回E字段值为c的记录,即* 1 * * c如果E字段值为c的记录有多个,则随意返回一条即可如果没有匹配,返回结果集为空即可
这样的查询SQL怎样写?要求不要用存储过程,谢谢各位老大呢!!!!
分不够可以加,谢谢!!
(
select * from
(select replace(col,'*','_') col,len(replace(col,'*','')) collen,t.* from
(
select A||B||C||D as col,tbname.* from tbname
) t
) tt
where '1131' like tt.col order by collen,e desc
) where rownum=1;