UPDATE RMS_IPTRUNK
SET WRONG_INFO=WRONG_INFO||'ASDASD'
WHERE 
  AND STATUS='在用'
  AND NOT EXISTS(
  SELECT 1
  FROM RMS_NEPORT A
  WHERE 
      A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT)
  AND NOT EXISTS(
  SELECT 1
  FROM RMS_NEPORT A
  WHERE
       A.PORT_NAME=RMS_IPTRUNK.REMOTE_PORT);初学SQL 这句话不是很理解 如果 A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT 错误就不会更新了吧?如果我要A.ZH_LABEL !=  A.PORT_NAME 这句话是不是验证不了?SQL是顺序执行的吧?我写上面那段语句是都会执行完的吗?

解决方案 »

  1.   

    A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT 会更新
      

  2.   

    --不理解,首先查询你所要修改的数据
    select * from  RMS_IPTRUNK
    WHERE 
      AND STATUS='在用'
      AND NOT EXISTS(
      SELECT 1
      FROM RMS_NEPORT A
      WHERE 
          A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT)
      AND NOT EXISTS(
      SELECT 1
      FROM RMS_NEPORT A
      WHERE
           A.PORT_NAME=RMS_IPTRUNK.REMOTE_PORT);如果我要A.ZH_LABEL !=  A.PORT_NAME 这句话是不是验证不了? 
    --A.ZH_LABEL !=  A.PORT_NAME意思不一样,SQL是顺序执行的吧?我写上面那段语句是都会执行完的吗?
    --上面只有一个sql,没有什么顺序可言
      

  3.   


    1.我的意思是如果 
    A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT
    下面的EXISTS无论是真是假
    都不会更新错误?2.我要判断A.ZH_LABEL 和 A.PORT_NAME 是否匹配,要另外写个语句?3.这一条SQL语句是不是每个EXISTS都会跑一遍?
      

  4.   

    建议你先自己试着解释一下这个SQL,否则别人也根本不知道你目前已经懂了什么,到什么层次,到底是哪儿不懂。写出你自己的理解,然后让别人来看你的理解是否正确。 否则别人解释过简单你还是理解不了,解释得过细,可能又是根本不必要。
      

  5.   

    两个NOT EXISTS都会执行
     
    A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT和A.PORT_NAME=RMS_IPTRUNK.REMOTE_PORT两个条件都会得到判断 
    当且仅当这两个条件都不符合 也就是说两个NOT EXISTS都返回TURE的时候UPDATE语句才会更新
      

  6.   

    你先把update语句改成select 看看相关的结果就知道了,实际的开发中经常用到这一招
      

  7.   

    这个主意不错select WRONG_INFO||'ASDASD',RMS_IPTRUNK.*
    from RMS_IPTRUNK
    WHERE 1=1
      AND STATUS='在用'
      AND NOT EXISTS(
      SELECT 1
      FROM RMS_NEPORT A
      WHERE 
          A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT)
      AND NOT EXISTS(
      SELECT 1
      FROM RMS_NEPORT A
      WHERE
           A.PORT_NAME=RMS_IPTRUNK.REMOTE_PORT);
      

  8.   

    where后面的条件都会被执行,不楼主把sql写错了,第一where 后不能直接跟and
      

  9.   

    楼主是不是想问的 是  or 而不是  and 啊??然后问sql的解析顺序是从后面向前还是从前面向后面解析?是从后面向前面的,但是是否执行到一个 or 满足条件的就不执行其他的就不太清楚了
      

  10.   

    从本质上说select update 都是DMl只不过操作不同,关键是where后面的条件首先你要找出需要更新的那些行然后在对行中的字段进行更新,update实际上是两步操作,按照这个方式你先写个select,看看返回的结果,是不是你要更新的那些行然后在update……set……至于您的代码,没工夫分析,这个完全是写sql的经验,多写写就会明白其中的道理,我建议你根据相关的业务连续写两个月的procedure,这些问题自然而然得可以得到解决。总之一句话select语句写少了
      

  11.   

    应该可以写成这个样子吧:
    UPDATE RMS_IPTRUNK
    SET WRONG_INFO=WRONG_INFO||'ASDASD'
    WHERE 
      AND STATUS='在用'
      AND NOT EXISTS(
      SELECT 1
      FROM RMS_NEPORT A
      WHERE 
          A.ZH_LABEL=RMS_IPTRUNK.REMOTE_PORT and A.PORT_NAME=RMS_IPTRUNK.REMOTE_PORT );
    在RMS_IPTRUNK, RMS_NEPORT 找出 A.ZH_LABEL <> RMS_IPTRUNK.REMOTE_PORT and A.PORT_NAME <> RMS_IPTRUNK.REMOTE_PORT  的记录更新