使用substr加入两个表

时间:2012-03-02 05:25:34

标签: sql db2 ibm-midrange

我有两张桌子:

TABLEA

JRNO    JSNO    TEXT
1955    7       S0042     1000122000

TABLEB

CODE    INV        TYPE
AWSE    1000122    CHE

我需要加入表格才能获得相关信息: -

CODE    INV        TYPE    JRNO    JSNO
AWSE    1000122    CHE     1955    7

为此,我使用以下SQL:

SELECT CODE, INV, TYPE, JRNO, JSNO
FROM TABLEB
LEFT OUTER JOIN TABLEA ON SUBSTR(TEXT,11,7) = INV
WHERE INV = ‘1000122’

然而,结果如下:

CODE    INV        TYPE    JRNO    JSNO
AWSE    1000122    CHE  

似乎"SUBSTR(TEXT,11,7) = INV"没有响应。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

<强>设置

create table tablea (jrno smallint, jsno smallint, text char(32));
create table tableb (code  char(8), inv char(8),type char(3));
insert into tablea values (1955,7,'S0042     1000122000');
insert into tableb values ('AWSE', '1000122', 'CHE');

使用子字符串

7: select code, inv, type, jrno, jsno
from tableb
left outer join tablea on substr(text,11,7) = inv
where inv = '1000122'
CODE    INV TYPE    JRNO    JSNO
====    === ====    ====    ====
AWSE        1000122     CHE 1955    7

使用定位

select code, inv, type, jrno, jsno
from tableb
LEFT OUTER JOIN TABLEA ON LOCATE('1000122', TEXT) > 0
CODE    INV TYPE    JRNO    JSNO
====    === ====    ====    ====
AWSE        1000122     CHE 1955    7

locate中的第一个参数(搜索工作)不能是列名,这就是为什么它在你尝试时不起作用。

CCSID是一个不是列数据类型的字符,所以除非表的创建与我的不相似,否则我看不出有什么问题。您能用我们用来创建表格的查询来更新我们吗?

答案 1 :(得分:0)

你有没有检查过你的来源:

SELECT JRNO, JSNO, TEXT, SUBSTR(TEXT, 11, 7) AS INV
  FROM TableA;

这会产生你所期望的吗?如果没有,那么这就是为什么带连接的查询也不起作用。

如果它确实产生了你所期望的,那么不会立即明显出现什么问题。