Sql 使用substr连接两个表
我有两张桌子: 表aSql 使用substr连接两个表,sql,db2,ibm-midrange,Sql,Db2,Ibm Midrange,我有两张桌子: 表a JRNO JSNO TEXT 1955 7 S0042 1000122000 表B CODE INV TYPE AWSE 1000122 CHE 我需要加入表以获得相关信息:- CODE INV TYPE JRNO JSNO AWSE 1000122 CHE 1955 7 为此,我使用以下SQL: SELECT CODE, INV, TYPE
JRNO JSNO TEXT
1955 7 S0042 1000122000
表B
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”
没有响应
有人能帮我吗?你有没有检查一下你从以下方面得到了什么:
SELECT JRNO, JSNO, TEXT, SUBSTR(TEXT, 11, 7) AS INV
FROM TableA;
这能产生你所期望的吗?如果没有,那么这就是为什么带有连接的查询也不起作用的原因
如果它确实产生了您所期望的结果,那么问题就不会立即显现出来。设置
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(search workd)中的第一个参数不能是列名,这就是为什么您尝试它时它不起作用的原因
CCSID是一种字符编码而不是列数据类型,因此,除非表的创建与我所拥有的不同,否则我看不出有什么问题。您能用您用来创建表的查询来更新我们吗?@Cybernate有正确的答案,但架构还是一团糟。文本应分为两列:INV和任何最后四个字符。如果它们是数字,它们应该存储为数字,而不是文本。请尝试在LOCATE(INV,text)>0上的左外联接表a(更多)此外,INV的数据类型是什么?建议的定位也不起作用。表b上的INV是字符字段还是数字字段?我会得到“1000122”,但当我尝试联接它时,它不会得到最终结果。