现在 5张表表1: ID  BZ 等字段表2:有 JE XH等字段
     2和3通过 XH进行关联,表3中的 ID字段 与表1关联
表3表4:有YE PZXH等字段
     4和5通过 PZXH 进行关联 表5中的 ID字段与表1关联
表5:现在我定义了一个游标:遍历表1 取出 ID字段要求: 如果不满足(表2中 JE>0 或 表4 YE>0) 且  1.ID = 3.ID =5.ID  且  2.XH = 3.XH 且 4.PZXH=5.PZXH  
       则 更新表1中的 BZ 字段为 Y自己写了几个,始终不得要领。 是不是该用 EXIST?SQL 菜鸟 求问大侠  谢谢不知道有没有描述清楚.. 

解决方案 »

  1.   

    理清表之间的对应关系用连接和EXISITS都是一样的
      

  2.   

    可以用exist来判断如果那个条件不满足就去更新。
      

  3.   

    你的需求使用exist与in都可以解决。但是楼主你需要先开清楚以下几个问题:
    1. 表1,3,5中的ID是唯一的吗?
    2. 三个表之间是一一对应的吗?存不存在其中某一个表中缺少哪个ID的情况呢?
    3. 表2与表3的对应关系也是一一对应的吗?
    4. 表5与表4的对应关系也是一一对应的吗?只有这些表关系都明确了才能有正确的解决方案。现在我假设各表之间都是一一对应,不存在一对多及缺失数据的情况,解决方案如下:-- IN 子查询
    SELECT * 
      FROM 1 
     WHERE 1.ID IN (
        SELECT 3.ID 
          FROM 3,5,2,4 
         WHERE 3.ID = 5.ID AND 3.XH = 2.XH AND 5.PZXH = 4.PZXH AND (2.JE > 0 OR 4.YE > 0))-- EXIST 子查询
    SELECT * 
      FROM 1 
     WHERE EXIST (
        SELECT 3.ID 
          FROM 3,5,2,4 
         WHERE 3.ID = 5.ID AND 3.XH = 2.XH AND 5.PZXH = 4.PZXH AND (2.JE > 0 OR 4.YE > 0) AND 1.ID = 3.ID)