SELECT a.QTY FROM A LEFT JOIN B WHERE A.BRAN 或 B.BRAN 的区别?方法一:SELECT a.QTY  FROM A
   LEFT JOIN  B 
WHERE A.BRAN LIKE '3'  返回7599行,方法二:
SELECT a.QTY  FROM A
   LEFT JOIN  B 
WHERE B.BRAN LIKE '3' 返回8689行我的理解:方法一应该返回行数多一些吧?方法二应该返回少一些吧,
因为方法一是直接从FROM A 来取数据的,
而方法二是LEFT JOIN B 貌似条件更苛求些。实际结果不然。

解决方案 »

  1.   

    方法二返回的结果多些是正确的。
    方法一先连接表B,然后再再筛选掉A表中A.BRAN的模糊'3'结果筛选掉。
    方法一先连接表B,然后再再筛选掉B表中B.BRAN的模糊'3'结果筛选掉。
    如果A表中的数据量大于B表中的,那么一定是B表中返回的数据量大一些了。
      

  2.   

    SQL> col name for a10
    SQL> select * from t1;NAME
    ----------
    ab1
    ab2
    ab3
    ab4
    ab5已选择5行。SQL> select * from t2;NAME
    ----------
    ab1
    ab4
    ab5已选择3行。SQL> SELECT *
      2    FROM t1
      3    LEFT JOIN t2
      4      ON (t1.name = t2.name)
      5   WHERE t1.name LIKE '%ab%';NAME       NAME
    ---------- ----------
    ab1        ab1
    ab4        ab4
    ab5        ab5
    ab3
    ab2已选择5行。SQL> SELECT *
      2    FROM t1
      3    LEFT JOIN t2
      4      ON (t1.name = t2.name)
      5   WHERE t2.name LIKE '%ab%';NAME       NAME
    ---------- ----------
    ab1        ab1
    ab4        ab4
    ab5        ab5已选择3行。SQL> 
      

  3.   


    --方法一:
    SELECT a.QTY 
    FROM A LEFT JOIN B 
    --这里应该还有一个连接条件
    WHERE A.BRAN LIKE '3'--这写法等于a.bran='3'
    返回7599行,方法二:
    SELECT a.QTY 
    FROM A LEFT JOIN B 
    --这里应该还有一个连接条件
    WHERE B.BRAN LIKE '3'--这写法等于b.bran='3'
    --返回8689行
    --
    --两个方法都是左连接,即以A表为基准
    --若是匹配的话:like '%3%'
    --方法一
    --     以a表为准,查询a表中bran字段含有字符'3'的记录,
    --     并返回记录
    --方法二
    --      还是以a表为基准,但是这次需要检查b表中bran字段
    --      是否含有字符'3',若含有且满足左连接的条件,
    --      就返回记录
    --
    --返回记录的行数是不确定的,这还得参照你当前的数据库表里面的数据
    --不同的过滤条件,返回的结果可能相同,可能不同
      

  4.   

    我记录行数是 A>B,A约85万,B 1.4万;不同方法间,A和B连接条件都是一样的,我认可2楼的结果,但是实际结果和2楼相反,怪事。