1、with as用法
2、having的用法
3、整体思路:
cc的查询查出来是name有且仅有'门户网站', '搜索引擎'这两个值的cid,利用这个中间结果再去执行后面查询

解决方案 »

  1.   

    哈哈、。我看了看with  as 用法、瞬间懂了。但是1楼的结果不对、返回空值
      

  2.   

    不懂啊!!! 
    我的表系多对多的:你的with  as 里面都错了。表结构:
    keyword( kid , word)【MyISAM引擎,kid为自增字段】
    1,'百度'
    2,'新华网'
    3,'谷歌'
    4,'人人网'
    class(cid,name)【MyISAM引擎,cid为自增字段】
    1,'门户网站’
    2,'搜索引擎'
    3,'门内网站'
    keyword_class(kid,cid)【MyISAM引擎,kid,cid分别来自其他两个表】
    1,1
    1,2
    1,3
    2,1
    3,1
    3,2
    3,3
    4,1
    4,2
      

  3.   

    SELECT KK.WORD
      FROM KEYWORD KK
     WHERE EXISTS (SELECT KC.KID
              FROM CLASS CC, KEYWORD_CLASS KC
             WHERE CC.CID = KC.CID
               AND KC.KID = KK.KID
    group by kc.kid
    having sum(decode(cc.name,'门户网站',0,'搜索引擎',0,1))=0
    and sum(decode(cc.name,'门户网站',1,'搜索引擎',1,0))=2
    )
      

  4.   

    我发现两条语句效率一样的啊、什么原因啊???感觉我之前的比这个还快。我之前的语句、加order  by  之后
    修改后的语句:我只是分页取前20条记录的对比。。