用sql语句怎样写查询的交集?
数据库中有很多组数据,但是取值范围都是在1-100,现在随机查询10组数字,每组5个数,假如我要在随机产生的每组数字中,控制它每次查询的每组结果里都必须包含有4,28,50,这样的sql语句要怎样写?下面是我写的,能查询出结果,但是结果不是我想要的那样:
sql = " select * from aa where (red1 in (" 4,28,50")) or (red2 in (" 4,28,50 ")) or (red3 in (" 4,28,50  ")) or (red4 in (" 4,28,50  ")) or (red5 in (" 4,28,50 "));
谢谢! 
"4,28,50"是变量,我每次都是不同的选择,不一定就是这三个数,还有我是想要在随机抽取的red1到red5这组数字,这组数字是由5个具体数字构成,"4,28,50"这个条件是相对与这组数字来说必须要包含它们,那么其他还有两个数字就可以随便是其他的数字了,不一定要是满足这个条件的,这个条件是相对于整个数组中的5个具体数来说的,请问要怎样解决?请详细点.谢谢了!!!不胜感激!!!

解决方案 »

  1.   

    想了一蠢办法,如要取4、28、50包含这3个数的行(取其它值的话就把5600、82换掉就可以)
    4*28*50=5600
    4+28+50=82select * from aa WHERE (red1*red2*red3=5600 and red1*red2*red3=82) or (red1*red2*red4=5600 and red1*red2*red4=82) or (red1*red2*red5=5600 and red1*red2*red5=82) or (red1*red3*red4=5600 and red1*red3*red4=82) or (red1*red5*red3=5600 and red1*red5*red3=82) or (red1*red4*red5=5600 and red1*red4*red5=82) or (red4*red2*red3=5600 and red4*red2*red3=82) or (red5*red2*red3=5600 and red5*red2*red3=82) or (red4*red2*red5=5600 and red4*red2*red5=82) or (red5*red4*red3=5600 and red5*red4*red3=82)
      

  2.   

    那你可以把5600换成一算式如:
    select * from aa WHERE (red1*red2*red3=4*28*50 and red1+red2+red3=4+28+50) or (red1*red2*red4=4*28*50 and red1+red2+red4=4+28+50) or (red1*red2*red5=4*28*50 and red1+red2+red5=4+28+50) or (red1*red3*red4=4*28*50 and red1+red3+red4=4+28+50) or (red1*red5*red3=4*28*50 and red1+red5+red3=4+28+50) or (red1*red4*red5=4*28*50 and red1+red4+red5=4+28+50) or (red4*red2*red3=4*28*50 and red4+red2+red3=4+28+50) or (red5*red2*red3=4*28*50 and red5+red2+red3=4+28+50) or (red4*red2*red5=4*28*50 and red4+red2+red5=4+28+50) or (red5*red4*red3=4*28*50 and red5+red4+red3=4+28+50)
      

  3.   

    -- 用于保存三个数的变量假设为@redvar
    declare @redvar varchar(20)
    set @redvar='4,28,50'
    --red1,red2,red3,red4,red5分别与@redvar比较,看是否被包含,用一case语句来判断,是返回1非返回0 结果相加>=3即合条件select * from aa
    where case when charindex(','+red1+',',','+@redvar+',')>0 then 1 else 0 end
    +case when charindex(','+red2+',',','+@redvar+',')>0 then 1 else 0 end
    +case when charindex(','+red3+',',','+@redvar+',')>0 then 1 else 0 end
    +case when charindex(','+red4+',',','+@redvar+',')>0 then 1 else 0 end
    +case when charindex(','+red5+',',','+@redvar+',')>0 then 1 else 0 end>=3