当前位置: 代码迷 >> Sql Server >> 关于数据库的排列组合选法,该如何处理
  详细解决方案

关于数据库的排列组合选法,该如何处理

热度:87   发布时间:2016-04-27 13:55:36.0
关于数据库的排列组合选法
想做个关于教用户做菜的程序……遇到一个排列组合的问题
问题描述:用户勾选自己已有的食材,然后程序给出根据食材可以做的菜的列表
如: 用户选择了 A B C 3种食材(你可以想象成蕃茄,土豆,牛肉)
那么系统应该 列出包含 A, B , C , AB , AC ,BC, ABC 的菜 ,但是像什么 ABD,AD之类的是肯定不会列出来的, 也就是说系统会将用户勾选的食材进行排列组合,根据所有排列组合列出对应菜名,但是菜的素材单若有用户未勾选的食材,那么是剔除在外的。


菜号 菜名 所需食材 做法  
1 菜名1 A 做法1  
2 菜名2 A B D 做法 2 
3 菜名3 A B C 做法 3 
4 菜名4 C D 做法 4 
5 菜名5 B C 做法 5  
如果用户选择了A B,C 3种食材,那么系统应该给出 1 , 3 ,5 3道菜…………

问题是如何用SQL语句将他们选择出来???

------解决方案--------------------
SQL code
--> 测试数据:[tbl]goif object_id('[tbl]') is not null drop table [tbl]gocreate table [tbl]([菜号] int,[菜名] varchar(5),[所需食材] varchar(3),[做法] varchar(5))goinsert [tbl]select 1,'菜名1','A','做法1' union allselect 2,'菜名2','ABD','做法2' union allselect 3,'菜名3','ABC','做法3' union allselect 4,'菜名4','CD','做法4' union allselect 5,'菜名5','BC','做法5'goif OBJECT_ID('p_tracy')is not nulldrop proc p_tracygocreate proc p_tracy @材料 varchar(10)asdeclare @str varchar(200)set @str='select * from tbl wherecharindex([所需食材],'+QUOTENAME(@材料,'''')+')>0'PRINT @STRexec(@str)exec p_tracy 'ABC'/*菜号    菜名    所需食材    做法1    菜名1    A    做法13    菜名3    ABC    做法35    菜名5    BC    做法5*/