zoukankan      html  css  js  c++  java
  • IN改写关联注意事项!

    SQL> select * from a1;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 2 a
    
    SQL> select * from a2;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 3 a
    
    SQL> select * from a1 where id in (select id from a2);
    
    	ID NAME
    ---------- ----------
    	 1 a
    
    改写成关联:
    SQL> select * from a1,a2
      2  where a1.id= a2.id;
    
    	ID NAME 	      ID NAME
    ---------- ---------- ---------- ----------
    	 1 a		       1 a
    
    此时是因为(select id from a2)子查询只返回一条记录,那么子查询返回多条呢?
    SQL> select * from a2;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 3 a
    	 1 a
    
    SQL> select * from a1 where id in (select id from a2);
    
    	ID NAME
    ---------- ----------
    	 1 a
    
    SQL> select a1.* from a1,a2
      2  where a1.id= a2.id;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 1 a
    
    此时是不是出现重复数据了?
    继续测试:
    SQL> select * from a1;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 2 a
    	 1 a
    
    SQL> select * from a2;
    
    	ID NAME
    ---------- ----------
    	 3 a
    	 1 a
    
    SQL> select * from a1 where id in (select id from a2);
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 1 a
    
    SQL>  select a1.* from a1,a2
      2  where a1.id=a2.id;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 1 a
    
    
    结论:IN改写关联时,如果子查询返回多条记录,需要去从。
    
    测试2:
    SQL> select * from a1;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 2 a
    	 1 a
    
    SQL> select * from a2;
    
    	ID NAME
    ---------- ----------
    	 2 a
    	 3 a
    	 3 a
    	 1 a
    	 1 a
    
    SQL> select * from a1 where a1.id in (select id from a2);
    
    	ID NAME
    ---------- ----------
    	 2 a
    	 1 a
    	 1 a
    
    SQL> select a1.* from a1 ,a2
      2  where a1.id=a2.id;
    
    	ID NAME
    ---------- ----------
    	 2 a
    	 1 a
    	 1 a
    	 1 a
    	 1 a
    
    正确写法:
    SQL>   select a1.* from a1 ,(select id from a2 group by id) a2
      2   where  a1.id=a2.id;
    
    	ID NAME
    ---------- ----------
    	 1 a
    	 2 a
    	 1 a
    子查询里面的 关联列没有重复数据 可以直接改In,如果关联列有重复数据需要去从


     

  • 相关阅读:
    机器学习作业12--朴素贝叶斯-垃圾邮件分类
    机器学习作业11--分类与监督学习,朴素贝叶斯分类算法
    机器学习作业9--主成分分析
    机器学习作业8--特征选择
    机器学习作业7--逻辑回归实践
    机器学习作业6--逻辑回归
    实验五 单元测试
    实验二 结对编程 第二阶段
    实验二 结对编程第一阶段
    实验一 GIT代码版本管理
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3797963.html
Copyright © 2011-2022 走看看