部分列数据上的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