首先说明一下这两个表的关系,P_FREIGHT_SPEC 表中的数据在P_PUBLIC_POLICY里都有对应数据,相反则不一定。
现在我要按条件查询出两表都有的数据或者只有一个表(p_public_polciy)中含有的数据。为什么这个sql不能满足?谁能提供以下思路/代码?
select *
  from P_PUBLIC_POLICY left join P_FREIGHT_SPEC F
                   on P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
                    AND P_PUBLIC_POLICY.UNITCODE = F.UNITCODE
                     AND P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
                     AND P_PUBLIC_POLICY.APPLYENDORSENO = F.APPLYENDORSENO
                     AND 3 > 2
                     AND P_PUBLIC_POLICY.APPLYNO = 'AHANHNE44207P000001X'
                     and p_public_policy.unitcode='3010100'
                     AND F.NUMBERPLATE='车牌'

解决方案 »

  1.   

    问题在于你把连接条件和检索条件混淆了select *
      from P_PUBLIC_POLICY left join P_FREIGHT_SPEC F
      on P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
      AND P_PUBLIC_POLICY.UNITCODE = F.UNITCODE
      AND P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
      AND P_PUBLIC_POLICY.APPLYENDORSENO = F.APPLYENDORSENO
      AND F.NUMBERPLATE='车牌' -- 这一句是连接条件还是检索条件,你考虑清楚
    where -- 与P_FREIGHT_SPEC F无关的条件别写在连接条件里 
      3 > 2 -- 你这有什么用
      AND P_PUBLIC_POLICY.APPLYNO = 'AHANHNE44207P000001X'
      and p_public_policy.unitcode='3010100'
      
      

  2.   

    select *
      from P_PUBLIC_POLICY left join P_FREIGHT_SPEC F
      on P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
      AND P_PUBLIC_POLICY.UNITCODE = F.UNITCODE
      AND P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
      AND P_PUBLIC_POLICY.APPLYENDORSENO = F.APPLYENDORSENO
      AND F.NUMBERPLATE='车牌'
    WHERE
      3 > 2
      AND P_PUBLIC_POLICY.APPLYNO = 'AHANHNE44207P000001X'
      and p_public_policy.unitcode='3010100'
      

  3.   

    你直接select * from p_public_polciy;不就行了吗???
      

  4.   


    select * from 
    (select *
      from P_PUBLIC_POLICY  t where  t.unitcode='3010100'and   t.APPLYNO = 'AHANHNE44207P000001X' ) aa 
      left join(select * from  P_FREIGHT_SPEC F where  F.NUMBERPLATE='车牌' ) bb
      on aa.APPLYNO = bb.APPLYNO
      AND aa.UNITCODE =bb.UNITCODE
      AND aa.APPLYNO =bb.APPLYNO
      AND aa.APPLYENDORSENO = bb.APPLYENDORSENO
      AND 3 > 2------???后面这个是什么条件???
      前面那样写估计就没问题
      

  5.   

    看了各位的回复,
    2#  我试了只能查出两表都有的数据。
    6#  也是一样。
    再补充两句:
    F.NUMBERPLATE='车牌' 只有两种情况才用到这个检索条件
    就是unitcode=‘13070900’和unitcode=‘13072800’
    再帮忙看下!
      

  6.   


    --把你的表结构和相应的需求都说清楚!select a.*,b.* from  
         (select * from P_PUBLIC_POLICY WHERE APPLYNO = 'AHANHNE44207P000001X' and unitcode='3010100') a
         left join 
         (select * from P_FREIGHT_SPEC where NUMBERPLATE='车牌')b
         ON a.APPLYNO = b.APPLYNO
         AND a.UNITCODE = b.UNITCODE
         AND a.APPLYNO = b.APPLYNO
         AND a.APPLYENDORSENO = b.APPLYENDORSENO
    ;
      

  7.   

    例如说表A和表B
    A 表中的数据在B里都有对应数据存在,
    但是B表里的数据在A表里不一定有对应的数据存在。
    如:
    A表结构:id   name   unitcode  applyno
            1    张三     111      adf
             2    李四     222      wer
    B表    id   score   object   applyno  
          1     80       4       adf
    现在我要按条件查询出:
     同一个sql只是检索条件的值不同。能单独查出张三信息 ,单独查询出李四信息的sql 。
    注意一下条件:
    当unitcode为‘111’时  则把object当做一个查询条件。
    (说明一下unitcode为111 这B表里一定有表A对应的数据。
    unitcode不为‘111’表B中则没有与表A对应的数据)