原来的表查询:sql = "SELECT dutswitch.DID, dutswitch.\"CustomerLotID\", dutswitch.\"state\",dutbin.PGM, dutbin.\"Pgm version\",dutswitch.\"status1\", dutswitch.\"status2\", dutbin.BIN, dutbin.TESTITEM FROM dutswitch,dutbin WHERE 
dutbin.CUSTOMERLOTID=dutswitch.\"CustomerLotID\" and dutbin.STATE = dutswitch.\"state\" and dutswitch.DID=$id";
现在情况有变,原switch表不变。有唯一的Customerlotid,不仅存在dutbin表内,而是出现在dutbin,a,b,c,d五个表中的任何一个表中(dutswith表中的Customerlotid和其他表中的Customerlotid一一对应)。请问这样的sql连表查询语句怎么写?

解决方案 »

  1.   

    用UNION ALL:
    SELECT DUTSWITCH.DID,
           DUTSWITCH.CUSTOMERLOTID,
           DUTSWITCH.STATE,
           DUTBIN.PGM,
           DUTBIN.PGM VERSION,
           DUTSWITCH.STATUS1,
           DUTSWITCH.STATUS2,
           DUTBIN.BIN,
           DUTBIN.TESTITEM
      FROM DUTSWITCH,
           (SELECT *
              FROM DUTBIN
            UNION ALL
            SELECT *
              FROM A
            UNION ALL
            SELECT *
              FROM B
            UNION ALL
            SELECT *
              FROM C
            UNION ALL
            SELECT * FROM D) DUTBIN
     WHERE DUTBIN.CUSTOMERLOTID = DUTSWITCH.CUSTOMERLOTID
       AND DUTBIN.STATE = DUTSWITCH.STATE
       AND DUTSWITCH.DID = $ID
      

  2.   

    谢谢楼上的。我的意思是如果表dutswitch中的customerlotid和dutbin,a,b,c,d五个表中的任一个表的customerlotid相匹配。相应的sql语句怎么写?例如,如果和a中的customerlotid相匹配,则sql语句应该如下:
    sql = "SELECT dutswitch.DID, dutswitch.\"CustomerLotID\", dutswitch.\"state\",a.PGM, a.\"Pgm version\",dutswitch.\"status1\", dutswitch.\"status2\", a.BIN, a.TESTITEM FROM dutswitch,dutbin WHERE 
    a.CUSTOMERLOTID=dutswitch.\"CustomerLotID\" and a.STATE = dutswitch.\"state\" and dutswitch.DID=$id";我是想达到这种效果。
      

  3.   

    一楼的正解啊,应该是你想要的效果。
    (SELECT * FROM DUTBIN
      UNION ALL
      SELECT *FROM A
      UNION ALL SELECT *
      FROM B UNION ALL
      SELECT * FROM C
      UNION ALL
      SELECT * FROM D) DUTBIN 中有了5个表的数据。然后再通过customerlotid进行匹配。只是联合表的名与物理表DUTBIN重名了,会带来误解吧。