刚才有个字段不让放在where子句中,否则也出现ORA-00936:缺少表达式,怎么回事?什么情况下会出现这种情况呢?

解决方案 »

  1.   

    SELECT TABLE1.*,TABLE2.PersonName
    FROM TABLE1, TABLE2
    WHERE TABLE1.PersonID=TABLE2.PersonID(+)
      

  2.   

    楼上那个加号用的真帅,顺便问一句,这是标准SQL吗?
      

  3.   

    呵呵。。oracle下就是这样写哦,到了 sql server中又有另外的写法。
      

  4.   

    不是标准SQL语法
    正面的是ORACLE独家SQL语法
    ORACLE:
    SELECT TABLE1.*,TABLE2.PersonName
    FROM   TABLE1, TABLE2
    WHERE  TABLE1.OperatorID=TABLE2.PersonID(+)MS SQL SERVER ,ACCESS
    SELECT TABLE1.*,TABLE2.PersonName
    FROM   TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.OperatorID=TABLE2.PersonID(+)
    (注,ACCESS要使用关健字OUTER,而在MS SQL SERVER中则可以省略)别,MS SQL SERVER也有自己的外联接语法
    *=左联接,相当于LEFT OUTER JOIN
    =*右联接,相当于RIGHT OUTER JOIN
    SELECT TABLE1.*,TABLE2.PersonName
    FROM   TABLE1, TABLE2
    WHERE  TABLE1.OperatorID*=TABLE2.PersonID你自己可以分别试一试
      

  5.   

    现在Table1中有两个字段(OperatorID1和OperatorID2)要关联Table2的PersonName,而且OperatorID2有可能为空,如果Table2中没有相关的ID,则Table1中的记录也应该被读出,这该怎么写?不用union
    写出来我将帖子加到100分。
      

  6.   

    select t1.* ,t2.personName as PersonName1 ,t3.PersonName as PersonName2
    from table1 t1 ,table2 t2,table2 t3
    where t1.OperatorID1 = t2.PersonID and t1.OperatorID1 = t2.PersonID(+)这下应该可以了吧。
      

  7.   

    不好意思,刚才写的有笔误。
    select t1.* ,t2.personName as PersonName1 ,t3.PersonName as PersonName2
    from table1 t1 ,table2 t2,table2 t3
    where t1.OperatorID1 = t2.PersonID and t1.OperatorID1 = t3.PersonID(+)
      

  8.   

    不对,Table1中有两个字段(OperatorID1和OperatorID2),而且如果这两个字段在Table2中都关联不到PersonName,则此条记录读不出。
      

  9.   

    如果table2中的PersonID已经使用, 就不应该能被删除。
    可以通过外键约束来限制。
    你的要求可以用:
    select t1.* ,t2.personName as PersonName1 ,t3.PersonName as PersonName2
    from table1 t1 ,table2 t2,table2 t3
    where t1.OperatorID1 = t2.PersonID(+) and t1.OperatorID2= t3.PersonID(+);
    来实现
      

  10.   

    楼上方法有冗余,加个Distinct搞定,给分。