SELECT * FROM  a, b where instr(b.name,a.name)>0,其中a表中有两列,有5万多条数据,b表有4列,有两百多万条数据,我执行后一直在查询,不出结果,也不报错。我想查找出b表中的name列包涵a表中name列的数据,显示出来
如果我的语句不行,请指点下我该怎么做,请帮忙解答下吧,谢谢了先

解决方案 »

  1.   


    --先查多少倏
    select count(*) from b where exists(select * from a where instr(b.name,a.name)>0);
    --然後再取數據
    select * from b where exists(select * from a where instr(b.name,a.name)>0);
      

  2.   

    count 时建议只选择有序主字段
      

  3.   

    楼主啊 你的sql SELECT * FROM  a, b where instr(b.name,a.name)>0 有问题啊
    a和b之间没有等值条件,就相当于做了一个笛卡尔积 50000*2000000=1000亿啊 能有结果才怪
    你的需求是什么啊 主数据应该是一张表,而不是两张表吧 如果是两张表,之间肯定要有关联字段
      

  4.   


    还真没有等值字段,就是想找出来a表中的name列里数据被b表中的name列包涵的,如a中与北京,b中有中国北京,就查找出来。
      

  5.   

    那就看2楼的sql吧 感觉他这个思路是对的 从b中select,把a表作为where条件
      

  6.   

    效果一样不代表本质也一样
    你原来的sql不出结果是应该的 因为千亿的数据量 不可能出结果
    2楼的sql不出结果应该是慢 你可以试着优化一下 比如 里边用到两个select *,可以优化
    也可以通过F5看一下查询计划,分析一下为什么慢 表中是否有索引等等
    再者可以先count(*)一下看看有没有结果,数据量是多少 如果是100多万的话,就说明sql本身没问题,只是需要优化
    如果count(*)也没有结果 那就先看看exists里边的条件的执行效率
    遇到问题不要怕 要集中优势兵力各个歼灭,一个一个解决