有两个表,表1是一个设备的型号图,表2是配件的型号图,一个设备包含多个配件,如表一的,1和2,通过GX和GJ查表2的数据,生成一个视图,包含这样格式的字段,a,x1,j1,md1,x2,j2,md2也就是将md追加到每个X和J后面表一:
a       x1  j1  x2  j2
--------------------------
temp1   t1  20  t2  13
temp2   t1  22  t3  13
..........表二x   j  md
t1  20 1.23
t1  22 1.55
t2  13 1.11
t2  17 1.45
t3  13 1.98
t4  15 1.68
.............
最后生成的格式为a       x1  j1   md1   x2  j2   md2
-------------------------------------
temp1   t1  20   1.23  t2  13   1.11
temp2   t1  22   1.55  t3  13   1.98
..........请问该怎么写这个sql语句呢?

解决方案 »

  1.   

    select a.*,b.表2.md from 表1 a,表2 b where a.x=b.x1
      

  2.   

    SELECT c.a, c.x1, c.j1, c.md md1, d.x2, d.j2, d.md md2
      FROM (SELECT *
              FROM 表1 a, 表2 b
             WHERE a.x1 = b.x
               AND a.j1 = b.j) c,
           (SELECT *
              FROM 表1 a, 表2 b
             WHERE a.x2 = b.x
               AND a.j2 = b.j) d
     WHERE c.a = d.a;
      

  3.   

    SELECT c.a, c.x1, c.j1, c.md md1, d.x2, d.j2, d.md md2
    中a不能再外面访问,也就是第一个c.a中a不能访问
      

  4.   

    CREATE OR REPLACE VIEW v_ab AS
    SELECT
        a,x1,j1,b.md as md1,x2,j2,c.md as md2      
        FROM 表一 a,表二 b ,表二 c
        where a.x1=b.x and a.j1=b.j
        and a.x2=c,x and a.j2=c.j;
      

  5.   

    SELECT c.a, c.x1, c.j1, c.md md1, d.x2, d.j2, d.md md2
      FROM (SELECT *
              FROM 表1 a, 表2 b
             WHERE a.x1 = b.x
               AND a.j1 = b.j) c,
           (SELECT *
              FROM 表1 a, 表2 b
             WHERE a.x2 = b.x
               AND a.j2 = b.j) d
     WHERE c.a = d.a;用这个稍微改动了一下
      

  6.   

    如果表1的数据量比较小或者表1通过过滤后数据量比较小,我倒比较喜欢用这种简单的写法:SELECT t.a,t.x1,t.j1,
           (SELECT md FROM table2 s WHERE s.x = t.x1 AND s.j = t.j1) md1,
           t.x2,t.j2,
           (SELECT md FROM table2 s WHERE s.x = t.x2 AND s.j = t.j2) md2
    FROM table1 t;
    如果table1的数据量较大或者说通过table1过滤后数据量还很大,不推荐使用上述写法,改一下:
    SELECT t.a,t.x1,t.j1,s1.md md1,md1,t.x2,t.j2,s2.md md2
     FROM table1 t,table2 s1,table2 s2
      WHERE t.x1 = s1.x AND t.j1 = s1.j
      AND t.x2 = s2.x AND t.j2 = s2.j;楼上有先将两表关联后在,将将两个视图关联,也是可以得到一样的结果,我是直接将table2命名为两个别名作为两个相同的表来查询了,可以把它当成两个表。