我很难修改这种情况的脚本,并想知道是否有人可以提供帮助:
我有一个address
表和一个phone
表,它们共享同一列id_number
。因此,两个表上的id_number = 2
指的是同一个实体。地址和电话信息曾经存储在一个表(address
表)中,但现在已经拆分为address
和phone
表,因为我们已转移到Oracle 11g。
有一个名为both_ids
的第3个表。除了存储id_number
的{{1}}列以及其他一些ID外,此表还有一个other_ids
列。
在将表拆分为SSN
和address
表之前,我有这个脚本:
(用Sybase编写)
phone
现在我们转移到了Oracle 11g,地址和电话信息被拆分了。
如何修改上述脚本以在Oracle 11g中生成相同的结果?
我是否必须先在地址和电话表之间进行INNER JOIN,然后对Both_ids进行LEFT OUTER JOIN?
我尝试了以下操作并且无效:
INSERT INTO sometable_3 (
SELECT a.id_number, a.other_id,
NVL(a1.addr_type_code,0) home_addr_type_code,
NVL(a1.addr_status_code,0) home_addr_status_code,
NVL(a1.addr_pref_ind,0) home_addr_pref_ind,
NVL(a1.street1,0) home_street1,
NVL(a1.street2,0) home_street2,
NVL(a1.street3,0) home_street3,
NVL(a1.city,0) home_city,
NVL(a1.state_code,0) home_state_code,
NVL(a1.zipcode,0) home_zipcode,
NVL(a1.zip_suffix,0) home_zip_suffix,
NVL(a1.telephone_status_code,0) home_phone_status,
NVL(a1.area_code,0) home_area_code,
NVL(a1.telephone_number,0) home_phone_number,
NVL(a1.extension,0) home_phone_extension,
NVL(a1.date_modified,'') home_date_modified
FROM both_ids a, address a1
WHERE a.id_number = a1.id_number(+)
AND a1.addr_type_code = 'H');
答案 0 :(得分:1)
您的查询中存在语法错误。您在下面的评论中写道,您的查询是:
..
FROM address a1 JOIN telephone t ON a1.id_number = t.id_number
AND RIGHT OUTER JOIN tt_gl_both_ids a ON a.id_number = a1.id_number
WHERE
..
抛出AND
,它会起作用。另外,用左外连接替换右外连接,因为这是你想要实现的(同样,根据你写的评论)。