Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部分列数据上的SQL联接(SQL Server)_Sql_Sql Server_Join - Fatal编程技术网

部分列数据上的SQL联接(SQL Server)

部分列数据上的SQL联接(SQL Server),sql,sql-server,join,Sql,Sql Server,Join,如果重要的话,两列都是tinyint 表1 Version -------- 111115 222226 333337 表2 ID Year -------- 5 2015 6 2016 7 2017 如果表2中的ID等于表1中版本字段中的最后一个值,则需要对该ID进行联接 版本11111 5将加入ID 5。我知道如何选择这样的事情,但加入是否可行?结果是: 111115 5 2015 蒂亚 您可以使用RIGHT()函数执行以下操作: SELECT * FROM Tabl

如果重要的话,两列都是
tinyint

表1

Version
--------
111115
222226
333337
表2

ID  Year
--------
5   2015
6   2016
7   2017
如果表2中的ID等于表1中版本字段中的最后一个值,则需要对该ID进行联接

版本11111 5将加入ID 5。我知道如何选择这样的事情,但加入是否可行?结果是:

111115  5  2015

蒂亚

您可以使用
RIGHT()
函数执行以下操作:

SELECT *
FROM Table1 A
INNER JOIN Table2 B on RIGHT(A.Version,1) = B.ID
不过,我可能会尽量避免这样做。这是一个错误的数据库设计。也许可以在表1中添加一列
ID
,并使用:

UPDATE Table1
SET ID = RIGHT(Version,1)

因为它们都是整数,所以可以尝试使用模运算符。除法后取余数。所以
11111 5%10
是5

SELECT *
FROM Table1 t1
INNER JOIN Table2 t2 on t1.Version % 10 = t2.ID

您可以加入对字段所做的任何修改,但会影响性能。所以,您可以加入子字符串(table1.Version,len(Version)-1,1)=Table2.ID,如果您愿意的话。很可能会很慢。更好的办法是将其放入临时表中,方法是选择子字符串和版本,然后将其加入到TABLE2中。TABLE2.ID的值是否会大于9?到目前为止,没有一个答案能够解决这种情况。
Declare @tblTest as table
(
    id INT,
    yearName INT
)


Declare @tblVersion as table
(
    VersionNo INT
)

INSERT INTO @tblTest values(5,2015)
INSERT INTO @tblTest values(6,2016)
INSERT INTO @tblTest values(7,2017)

INSERT INTO @tblVersion values(111115)
INSERT INTO @tblVersion values(111116)
INSERT INTO @tblVersion values(111117)


select 
*,RIGHT(VersionNo,1) 
from @tblVersion

SELECT 
*
FROM @tblTest T1 
LEFT JOIN (SELECT RIGHT(VersionNo,1) AS VersionId,VersionNo FROM @tblVersion) T2 ON T2.VersionId=T1.id