日期:2014-05-17  浏览次数:21197 次

oracle将两个表关联成一个试图的问题(带图带语句)回帖有惊喜
这是两个表如下图

我让这两个表合成一行,用下面的语句:
create or replace view v_djwz_linshi as
SELECT * FROM
  (select 1 R101Hid, rbh R101设备编号, xzwz R101行走位置, hzjd R101回转角度, bcrq R101时间 from ssss2 where rbh='R101') R101
 
left join
  (select 1 S08Hid, sbh S8设备编号, xzwz S8行走位置, hzjd S8回转角度, indate S8时间 from ssss1 where sbh='S08') S08 ON R101.R101Hid=S08.S08Hid
结果如下图:


我想把那个R101HID和S08HID那两列去掉,我改了下语句:
create or replace view v_djwz_linshi as
SELECT * FROM
  (select  rbh R101设备编号, xzwz R101行走位置, hzjd R101回转角度, bcrq R101时间 from ssss2 where rbh='R101') R101
 
left join
  (select sbh S8设备编号, xzwz S8行走位置, hzjd S8回转角度, indate S8时间 from ssss1 where sbh='S08') S08 ON R101.R101设备编号=S08.S8设备编号
结果如图

可后面S8的几列没有数据了,大侠们帮忙看看是哪的问题吧?
R101HID和S08HID那两列的格式默认的是number型,我想问怎么能变成其他格式吗?我把1改成字母S08提示错误
谢谢各位了!
另外下面这个链接是之前发重的一个帖子,你们谁回一个,我就结了。
http://bbs.csdn.net/topics/390398583

------解决方案--------------------
你把那个R101HID和S08HID那两列去掉后 LEFT JOIN 的关联就失效了。你可以直接写成 select ssss1.*,ssss2.* from ssss1,ssss2 where ssss2.rbh='R101' and ssss1.sbh='S08'
------解决方案--------------------
把中间的字段改成要需要的就行了。
------解决方案--------------------
原因是这样的:
一 在上面的sql语句中,你用的关联条件是'R101.R101Hid=S08.S08Hid',其中因为R101.R101Hid和S08.S08Hid的值都为1,所以关联出了所有的结果值
二 在下面的sql语句中,你用的关联条件是'R101.R101设备编号=S08.S8设备编号',其中R101.R101设备编号的值是R101,而S08.S8设备编号的值是S08,两者是关联不到的。因为你用的左外连接,所以只能保留表R101中的所有值,后面的表S08因为关联不到,所以对应的列就是空了。
按照你的要求,我修改好的sql语句如下所示,你参考下
--修改后的sql语句
SELECT R101设备编号,R101行走位置,R101回转角度,R101时间,
  S8设备编号,S8行走位置,S8回转角度,S8时间
  FROM (SELECT 1    R101HID,
               RBH  R101设备编号,
               XZWZ R101行走位置,
               HZJD R101回转角度,
               BCRQ R101时间
          FROM SSSS2
         WHERE RBH = 'R101') R101

  LEFT JOIN (SELECT 1      S08HID,
                    SBH    S8设备编号,
                    XZWZ   S8行走位置,
                    HZJD  &