2012-09-26 134 views
0

我是SQL新手,请耐心等待。根据第一个表格的第二个数值加入两个表格

我正在使用两个没有公共字段的表。我试图创建一个基于两个表的简单层次结构是这样的:

Table 1. 

Cul 1 Cul 2 
============== 
S10000 Name 
S20000 Name 1 
S30000 Name 2 
S40000 Name 3 

Table 2 

Cul 1 Cul 2 
===================== 
A10000 Test 
A10001 Test 123 
A20000 Test 1 
A20001 Test 999 
A30000 Test 2 
A30002 Test 5555 
A40000 Test 3 
A40006 Test 84384848 

我想编写一个查询,从表1基于第一列匹配数值显示“姓名”字段从表1 & 2.

所以,如果表1是S10000,显示A1000 - 测试

这可能吗?

谢谢

+0

当你说“的基础上,从表1和2匹配在第一列中的数值”,你怎么能指望这样做,当该号码相匹配的非?即使在您的示例结果中,S10000和A1000也会关闭一个0. – northpole

+0

我不知道此事,但表1和2中的字符长度相同。我只是做了调整。 – Zhenya

+0

@ Zhenya您使用的是什么RDBMS? SQL Server,MySQL,Oracle? – Taryn

回答

2
SELECT 
    t2.* 
FROM Table1 t1 
INNER JOIN Table2 t2 on SUBSTRING(t1.Cul1,2,LEN(t1.Cul1)-1)=SUBSTRING(t2.Cul1,2,LEN(t2.Cul1)-1) 
+0

我刚刚检查,并没有得到所有的价值。代码从某些原因跳过了一些值。 – Zhenya

+0

例如,以A3或A4开头的表格2值将被忽略。 – Zhenya

+0

请忽略我的评论。我有相反的顺序值 – Zhenya

5

你的要求是不完全清楚,但它听起来像你想的:

select t1.col1 t1Name, 
    t1.col2 t1Value, 
    t2.col1 t2Name, 
    t2.col2 t2Value 
from table1 t1 
inner join table2 t2 
    on substring(t1.col1, 2, 1) = substring(t2.col1, 2, 1) 

看到SQL Fiddle with Demo

编辑,你也可以使用:

select t1.col1 t1Name, 
    t1.col2 t1Value, 
    t2.col1 t2Name, 
    t2.col2 t2Value 
from table1 t1 
inner join table2 t2 
    on substring(t1.col1, 2, len(t1.col1)) 
     = substring(t2.col1, 2, len(t2.col1)); 
+0

查询的另一个问题是,值增加了一倍。因此,不要为两个表的组合返回单一描述。我看到了多个值。 – Zhenya

+0

你能解释一下你的意思吗? – Taryn

+0

在表1中,我只有7行,这就是我将两张表合并后的所有结果。在我的连接表中,我有15个不同的值,有些是重复的。例如 - S10000名称显示4次,而不是只显示一次。 – Zhenya

0

如果您确定第一位数字是数字并且遵循b y中的数值,则下面应该工作

SELECT A.cul1,B.cul2 
FROM dbo.Table1 A, dbo.Table2 B 
WHERE substring(A.cul1,2,len(A.cul1))= substring(B.cul1,2,len(B.cul1)) 
+0

谢谢拉马克它的工作就像魔术! – Zhenya

相关问题