仅在SQL Server中返回匹配行
我相信这很简单,但我真的被卡住了。下面是我想要的两个表的结果集示例,这两个表具有相同的结构,在本例中是数据或记录 表仅在SQL Server中返回匹配行,sql,sql-server,Sql,Sql Server,我相信这很简单,但我真的被卡住了。下面是我想要的两个表的结果集示例,这两个表具有相同的结构,在本例中是数据或记录 表 Ref cola colb id ------------------ 1 a b 14 1 a b 24 表B Ref cola colb id ------------------ 1 a b 1 1 a b 2 1 a b 3 预期结果: Ref
Ref cola colb id
------------------
1 a b 14
1 a b 24
表B
Ref cola colb id
------------------
1 a b 1
1 a b 2
1 a b 3
预期结果:
Ref cola colb id Ref1 cola1 colb1 id1
----------------------------------------
1 a b 14 1 a b 1
1 a b 24 1 a b 2
使用:
或
使用:
或
还有一种方法是
;with cte
as
(
select Ref, cola, colb, id,
hashbytes('sha1',concat(Ref, cola, colb)) as tb1hash
from table1
)
select
t1.Ref, --all required cols
from cte c
join
(
select Ref, cola, colb, id,
hashbytes('sha1',concat(Ref, cola, colb)) as tb2hash
from table2
) b
on
b.tb2hash=c.tb1hash
还有一种方法是
;with cte
as
(
select Ref, cola, colb, id,
hashbytes('sha1',concat(Ref, cola, colb)) as tb1hash
from table1
)
select
t1.Ref, --all required cols
from cte c
join
(
select Ref, cola, colb, id,
hashbytes('sha1',concat(Ref, cola, colb)) as tb2hash
from table2
) b
on
b.tb2hash=c.tb1hash
猜测:
;WITH TableAWithRowNum
AS (
SELECT *, ROW_NUMBER(ORDER BY id) AS RowNum
FROM dbo.TableA
), TableBWithRowNum
AS (
SELECT *, ROW_NUMBER(ORDER BY id) AS RowNum
FROM dbo.TableB
)
SELECT a.*, b.*
FROM TableAWithRowNum a
INNER JOIN TableBWithRowNum b ON a.Ref = b.Ref
--AND other join predicates on ColA, ... etc.
AND a.RowNum = b.RowNum
猜测:
;WITH TableAWithRowNum
AS (
SELECT *, ROW_NUMBER(ORDER BY id) AS RowNum
FROM dbo.TableA
), TableBWithRowNum
AS (
SELECT *, ROW_NUMBER(ORDER BY id) AS RowNum
FROM dbo.TableB
)
SELECT a.*, b.*
FROM TableAWithRowNum a
INNER JOIN TableBWithRowNum b ON a.Ref = b.Ref
--AND other join predicates on ColA, ... etc.
AND a.RowNum = b.RowNum
您至少应该在连接的列之间添加分隔符以避免冲突。@LAD22025:我认为,这不会产生冲突,对于sha1来说,产生冲突需要很多年。“6610年的处理器时间”我是说concat like
11 2
和1 12
将产生相同的冲突。在11 | 2
1 | 12
中,您至少应该在连接的列之间添加分隔符以避免合并。@LAD22025:我认为,这不会产生冲突,sha1产生冲突需要很多年的时间。“6610年的处理器时间”我是指类似concat的11 2
和1 12
将产生相同的结果。其中11 | 2
1 | 12
表格A有2行,而表格B有3行。为什么结果只包括2行?它不必是2行,它可以是3行,表A中的第3行有空值Stablea有2行,而表B有3行。为什么结果只包含2行?它不必是2行,它可以是3行,表A中的第3行具有空值。为了从两个表中获取所有行,而不是内部联接,我将使用完全外部联接。为了从两个表中获取所有行,而不是内部联接,我将使用完全外部联接。