2012-03-02 16 views
0

兩個表我有兩個表:加入使用SUBSTR

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"沒有響應。

有人可以幫助我嗎?

+1

@Cyber​​nate有正確答案,但模式無論如何都搞砸了。文本應該分成兩列:INV和最後四個字符。如果他們是數字,他們應該被存儲爲數字,而不是文本。 – 2012-03-02 05:30:58

+0

嘗試'LEFT OUTER JOIN TABLEA ON LOCATE(INV,TEXT)> 0'(更多http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.admin.doc /doc/r0000820.htm) – Isaac 2012-03-02 07:10:49

+0

另外,INV的數據類型是什麼? – Isaac 2012-03-02 07:13:21

回答

0

你檢查,你會得到什麼:

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

這是否產生你的期望?如果沒有,那麼這就是爲什麼帶有連接的查詢也不起作用的原因。

如果它確實產生了你所期望的,那麼它不會立即明顯地出現什麼問題。

+0

我會得到'1000122',但是當我嘗試加入時,它不會得到最終結果。 – Bob 2012-03-02 07:43:58

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 

第一p定位(搜索工作)中的參數不能成爲列名,這就是爲什麼當你嘗試它時它沒有工作。

CCSID是一種字符編碼而不是列數據類型,所以除非表的創建與我所擁有的不相似,否則我不會看到有什麼問題。你能否用我們用來創建表格的查詢來更新我們?