有两个表,表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语句呢?
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语句呢?
解决方案 »
- 关于char与varchar的问题
- 求java下oracle类库的API手册
- oracle存储过程问题
- 求一个与多表left join等价的where语句,自己用(+)写了个但不太对
- Oracle比SQL SERVER优越在什么地方?
- 菜鸟请教:delete trigger 设计...
- 插入记录后马上读出自增主键的问题
- 如何建立一个复杂的VIEW
- 各位高手:如何用java调用oracle中的存储过程?(高分相送)
- 多对多的关系数据表,如何写储存过程插入数据?
- dbms_output.put_line(time_after - time_before)结果怎么是0?
- 急救啊,快来帮帮忙,oracle的blob字段在网页上显示乱码
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;
中a不能再外面访问,也就是第一个c.a中a不能访问
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;
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;用这个稍微改动了一下
(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命名为两个别名作为两个相同的表来查询了,可以把它当成两个表。