--试试这个:--1.产品Type = 1, 产品值 = 1 AND 产品Type = 2, 产品值 = 6
select a.* from 媒体库 a 
join 媒体类型信息库 b on a.产品ID=b.产品ID and a.仓库ID=b.仓库ID
join 媒体类型信息库 c on a.产品ID=c.产品ID and a.仓库ID=c.仓库ID
where b.产品Type=1 and b.产品值=1
and c.产品Type=2 and c.产品值=6--2.产品Type = 1, 产品值 = 1 AND 产品Type = 2, 产品值 = 8
select a.* from 媒体库 a 
join 媒体类型信息库 b on a.产品ID=b.产品ID and a.仓库ID=b.仓库ID
join 媒体类型信息库 c on a.产品ID=c.产品ID and a.仓库ID=c.仓库ID
where b.产品Type=1 and b.产品值=1
and c.产品Type=2 and c.产品值=8

解决方案 »

  1.   

    to : zjcxc(祝大家新年快乐.邹建.共享果) 
      不错噢,但是如果条件多了(type1~n)都要的话,就要join n次表,这样在100万记录的情况下,可能也有性能问题吧?
      

  2.   

    这样在100万记录的情况下
    当type有6个时,
    产品Type = 1, 产品值 = 1 
    AND 产品Type = 2, 产品值 = 6
    AND 产品Type = 3, 产品值 = 24
    AND 产品Type = 4, 产品值 = 78
    AND 产品Type = 5, 产品值 = 102
    AND 产品Type = 6, 产品值 = 305邹老师的语句需要写成这样
    select a.* from 媒体库 m 
    join 媒体类型信息库 a on m.产品ID=a.产品ID and m.仓库ID=a.仓库ID
    join 媒体类型信息库 b on m.产品ID=b.产品ID and m.仓库ID=b.仓库ID
    join 媒体类型信息库 c on m.产品ID=c.产品ID and m.仓库ID=c.仓库ID
    join 媒体类型信息库 d on m.产品ID=d.产品ID and m.仓库ID=d.仓库ID
    join 媒体类型信息库 e on m.产品ID=e.产品ID and m.仓库ID=e.仓库ID
    join 媒体类型信息库 f on m.产品ID=f.产品ID and m.仓库ID=f.仓库ID
    where 
        a.产品Type = 1, 产品值 = 1 
    AND b.产品Type = 2, 产品值 = 6
    AND c.产品Type = 3, 产品值 = 24
    AND d.产品Type = 4, 产品值 = 78
    AND e.产品Type = 5, 产品值 = 102
    AND f.产品Type = 6, 产品值 = 305我现有的方法需要这样写
    select 媒体库.* from 媒体库
    join (
    select [仓库ID] , [产品ID] from (
    select [仓库ID] , [产品ID]
    from [媒体类型信息库]
    where [产品值]=1 or [产品值]=6 or 产品值 = 24 or 产品值 = 78 or 产品值 = 102 or 产品值 = 305
    group by [仓库ID], [产品ID], [产品Type]
    ) as a1
    group by a1.[仓库ID] , a1.[产品ID]
    having count(*) = 6
    ) as a2 on a2.[仓库ID] = [媒体库].[仓库ID] and a2.[产品ID] = [媒体库].[产品ID]表[媒体类型信息库]需要遍历一次,结果还需要group by 和having 
    邹老师的可能就要join 6次表[媒体类型信息库],并在其中搜索遍历。效率可能不是很好,但却清晰很多。
    希望可以有更好的语句,请各位继续指教。谢谢