size=11px]请问大家 如果我 select A left jion B on A.字段=B.字段 
and B.字段=K (或者B.另外字段=K) 
与 select A left jion B on A.字段=B.字段 
where B.字段=K 
有什么区别啊,请大家从理论上讲清楚

解决方案 »

  1.   

    用下面的例子说明一下,看看有什么区别吧
    create table a (a varchar(10),b int);
    insert into a values('ddd',10);
    insert into a values('aaa',20);
    insert into a values('ccc',30);
    create table b (a varchar(10),k varchar(20))insert into b values('ddd','ok');
    insert into b values('ddd','no');
    insert into b values('aaa','ddd');
    insert into b values('aaa','ok');select * from a left join b on a.a=b.a and b.k='ok'  
    //显示的是a表中的所有记录,b表中(b.k='ok') 与a表中有关系的记录
    //也就是说,这里用b.k='ok'的记录与a表时行左,连接.
    ddd 10 ddd ok
    aaa 20 aaa ok
    ccc 30 NULL NULL
    select * from a left join b on a.a=b.a where b.k='ok' 
    //这里是先查询select * from a left join b on a.a=b.a  然后,再过滤出b.k='ok'的记录,所以就是2条了.
    //也就是这晨用a与b表时行完左连接后,再进行一次筛选.
    ddd 10 ddd ok
    aaa 20 aaa ok不知这样描述能否明白.
      

  2.   

    能这样写?
    select A left jion B on A.字段=B.字段 and B.字段=K 
    select A left jion B on A.字段=B.字段 where B.字段=K 
    这样写是错的
    还有
    你想要什么啊 
    就要‘字段=k'?
    这样写好了
    select * from (select a.字段 from a , b where a.字段=b.字段)
    where 字段='k'
    我在SQL上运行下就自动写成这样了
    SELECT *
    FROM (SELECT a.字段
            FROM ceshi1 a, ceshi2 b
            WHERE a.字段 = b.字段) DERIVEDTBL
    WHERE (字段 = 'k')
    多了个这个”DERIVEDTBL“
    你问有什么区别
    先写对SQL
    你的第二个那样写的话可能运不过去(我说的是在后面加个where b.字段='k')
    应该是个错的句子