2016-12-16 59 views
-2

我有表A和B表与下面的数据如何避免在Oracle SQL相乘数据

A 
-- 
org location 
123 001 
123 002 
123 003 

B 
-- 
org sub_inv 
123 001_a 
123 002_a 
123 003_a 

现在我需要编写一个查询来获取像

org, sub_inv, loc 
123 001_a 001 
123 002_a 002 
123 003_a 003 

下面的结果查询是给出相乘的数据。请帮我提出建议。

select 
from a,b 
where a.org=b.org 

感谢, Mamatha

+0

有没有在'加入org'这将给你你想要的结果。你能详细说明你的问题吗? –

+0

你的问题是什么。查询是好的,你只需要列出你想要选择的列。 – Kacper

+0

位置总是3个字符,并且它始终与sub_inv的前3个字符相关?以及位置的数据类型是什么? – xQbert

回答

0

从什么样子,这是你在找什么。你需要详细说明你在问什么。从你的问题你所问的是如何做一个加入选择。

+0

3 rec在A * 3 rec in B = 9在org上的记录期望的结果是3.我看到它的问题是sub_inv上的一个缺失连接,位于sub_inv的子串上。但这是我的一些想法。 – xQbert

1

如果我假定位置始终是3个字符,它总是涉及sub_inv的前3个字符;那么除了org之外,您还需要加入sub_inv的子字符串。

我假设在A * 3条记录3条记录B的给你9条,并且只想3.鉴于所提供的唯一其他相关性的位置代码我假设sub_inv包含位置

我不是一个从条款中的符号的粉丝,所以我重写了一下。

SELECT A.org, B.sub_inv, A.loc 
FROM A 
INNER JOIN B 
on A.Org = B.Org 
and cast(A.Location as varchar2(3)) = substr(sub_inv,1,3) 
1

这应该工作:

select a.org 
     ,b.sub_inv 
     ,a.loc 
from a 
    join b on (a.org   = b.org 
       and a.location = substr(b.sub_inv,1,length(a.location)) 
       )