Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Sql Server - Fatal编程技术网

类似列上的Sql联接,但不相同

类似列上的Sql联接,但不相同,sql,sql-server,Sql,Sql Server,假设一个表中有a列,另一个表中有第2列。他们都是navchar。第2列以“-US”结尾。如果第1列与第2列相同,但没有us结尾,那么如何连接这两个表?您可以选择其中一个 SELECT a.Field1 ,a.Field2 ,b.Field3 FROM TableA a JOIN TableB b ON a.Fieldname + '-US' = b.FieldName 或者,如果它不总是在美国结束,那么你可以试试这个 SELECT a.Field1

假设一个表中有a列,另一个表中有第2列。他们都是navchar。第2列以“-US”结尾。如果第1列与第2列相同,但没有us结尾,那么如何连接这两个表?

您可以选择其中一个

SELECT
    a.Field1
    ,a.Field2
    ,b.Field3
FROM TableA a
JOIN TableB b
    ON a.Fieldname + '-US' = b.FieldName
或者,如果它不总是在美国结束,那么你可以试试这个

SELECT
    a.Field1
    ,a.Field2
    ,b.Field3
FROM TableA a
JOIN TableB b
    ON b.FieldName LIKE a.FieldName + '%'

显然要做的事情是将
-US
后缀考虑在内:

on t2.c2 = t1.c1 + '-US'
或许:

on t1.c1 = left(t2.c2, len(t2.c2) - 3)

如果你想要性能,你可以考虑一个带索引的计算列。大概是这样的:

alter table t1 add c1_us as (c1 + '-US');

create index t1_c1_us on t1(c1_us);
这将允许索引用于以下情况:

on t2.c2 = t1.c1_us

在t2.c2=t1.c1+'-US'
上,您还可以尝试添加
和t2.c2,如t1.c1+'%'
以查看是否有更好/更快的计划。