Sql 基于第一个表中的第二个数值连接两个表

Sql 基于第一个表中的第二个数值连接两个表,sql,sql-server,tsql,join,Sql,Sql Server,Tsql,Join,我是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 A2000

我是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和表2中第一列中的匹配数值显示表1中的“Name”字段

因此,如果表1为S10000,则显示A1000–测试

可能吗


谢谢您

您的要求并不明确,但听起来您希望这样:

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)
看见 编辑,您还可以使用:

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));

如果您非常确定第一个数字是数字,后面是数字,那么下面的内容应该可以使用

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))

当您说“基于表1和表2第一列中的匹配数值”时,如果没有一个数字匹配,您怎么能期望这样做?即使在您的示例结果中,S10000和A1000的值也相差1 0。我不知道这有什么关系,但表1和表2中的字符长度相同。我刚做了调整。@Zhenya你在用什么RDBMS?SQL Server、mysql、oracle?在匹配的字符之前是否总是有一个非数字字符?我刚刚检查过,并不是所有的值都被提取出来。代码出于某种原因跳过了某些值。例如,表2中以A3或A4开头的值将被忽略。请忽略我的注释。我有相反顺序的值查询的另一个问题,值是加倍的。所以,不要为两个表的组合返回单个描述。我看到了多个值。你能解释一下你的意思吗?在表1中,我只有7行,这就是我合并这两个表后应该得到的全部内容。在我的连接表中,我有15个不同的值,有些值是重复的。例如,-S10000 Name显示了4次,而不是仅显示一次。@Zhenya您的要求不是很清楚,但您也可以使用我在我的edit@Zhenya看看这把sql小提琴--它们是别名
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)