表1
表2查询 表2的发货省份,发货城市,收货省份,收货城市 与
        表1的发货省份,发货城市,收货省份,收货城市相等 的数据。是直接关联where接这四个条件吗?

解决方案 »

  1.   

    一张表中的主键必须是唯一的,当然作为主键可能是单一的属性,也有可能的几个属性的组合,而你的表中“发货省份,发货城市,收货省份,收货城市”这四个属性即合联合作为主键也是有重复的。
    本身多表的查询就是先做迪卡尔集,然后根据where条件进行筛选,但是非主键的关联where筛选是不可能排除重复值的。
      

  2.   

    表二是需要匹配的地区表idd字段可以忽略,需在表1中匹配出同时满足表2的发货省,市和收货省,市的数据行
      

  3.   

    select table1.单号,table1.发货省份,table1.发货城市,table1.收货省份,table1.收货城市
    from table1,table2 
     where table1.发货省份=table.2发货省份 
       and  table1.发货城市=table2.发货城市 
        and  table1.收货省份=table2.收货省份 
         and  table1.收货城市=table2.收货城市 
    表1有60多万条数据,表2 有6百多条,最后才查到7000条,distinct一下单号就剩6000多了,感觉应该不止的。这写法有问题吗?
      

  4.   


    怕是对笛卡尔积有什么误解。
    而且oracle不会这么来做连接,如果任何表连接先做笛卡尔积然后再来过滤,数据量稍微大点,库可以分分钟搞趴下。
      

  5.   

    表二是需要匹配的地区表idd字段可以忽略,需在表1中匹配出同时满足表2的发货省,市和收货省,市的数据行查询没什么问题,也许数据就是这样。
      

  6.   

    活见鬼,为什么写随便写个test就可以发出来。
    如果表1只有这样的问题,那么连接条件可以用substr截取表2的收货省份字段的前两位再与表1的收货省份字段做比较