表 total
ID  tableName  tableID
1   A          1     
2   A          2  
3   B          1  
4   A          3  
5   A          4  
6   B          2  
7   B          3  
8   B          4  
6   A          5  
表 A
ID  NAME
1   一
2   二
3   三
4   四
5   五
6   六
7   七
表 B
ID  NAME
1   1
2   2
3   3
4   4
5   5
6   6
7   7total做主表,当tableName=A的时候,就到A表关联相应ID的记录;当table=B的时候,就到B表关联相应ID的记录。期望的结果集:
ID  tableName  tableID  NAME
1   A          1        一  
2   A          2        二
3   B          1        1
4   A          3        三
5   A          4        四
6   B          2        2
7   B          3        3
8   B          4        4
6   A          5        五

解决方案 »

  1. 试一下SELECT T.*,A.*,B.*
    FROM total T
    LEFT JOIN A on T.totalName=A.ID AND T.totalName='A'
    LEFT JOIN B on T.totalNmae=B.ID AND T.totalName='B'
      

  2. 表A中的ID和表total中的哪个是对应的,tableID ?
      

  3. 下面是我的实现的两种方式,不知,各位高手是否还有更加优的方案呢?SELECT t.*,IF(t.tableNAME='A',a.name,b.name) as name
    FROM a_table t
    LEFT JOIN  a_a a ON t.tableID=a.id AND tableName='A'
    LEFT JOIN  a_b b ON t.tableID=b.id AND tableName='B'
    SELECT a.*,IF((tableName='A'),(SELECT name FROM a_a m WHERE m.id=a.tableID),(SELECT name FROM a_b n WHERE n.id=a.tableID)) as name
    FROM a_table a;
      

  4. 当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

类似问题 »