日期:2014-05-17  浏览次数:20927 次

SQL的查询条件
本帖最后由 wnf2009 于 2013-02-14 16:16:06 编辑
  A inner join B on 后的条件可不可以放到where后面?
   比如说
 select * from A inner join B on A.name = B.name and A.salary = B.salary left join C on A.age = C.age
等不等价于
 select * from A inner join B on A.name = B.name left join C on A.age = C.age where A.salary = B.salary 


另外顺便再问下,jdbc的preparestatement里,"?"能放在"on" 后面么?

------解决方案--------------------
第一个问题是可以的
hr@ORCL> select * from a inner join b on a.id=b.id where a.name=b.name;

        ID NAME               ID NAME
---------- ---------- ---------- ----------
         1 aa                  1 aa
         2 bb                  2 bb
         3 cc                  3 cc
         4 dd                  4 dd

------解决方案--------------------
第二个问题也是可以的
------解决方案--------------------
不要这样写sql语句,很容易引起混乱,尤其在where条件那块。单独的做内连接,然后查询出来的结果集作为子查询再内连接,这样虽然麻烦,但不会错。
------解决方案--------------------
额,内连接应该是可以的
------解决方案--------------------
oracle里这是两种方式。
where 就相当于 join .....on
通常情况下只选择一种使用,这两者结合起来多数不同时使用的
------解决方案--------------------
如:
   select * from a left outer b on a.bid=b.id
相当于
   select * from a, b where a.bid=id(+)