Sql 使用外键中的范围连接表
我目前有两个表需要连接 第一个表是一个大表,有数百万条记录。第二个是匹配表。我想加入2号桌。预期结果表如下所示。我需要关于如何在MS-SQL中编写SQL以连接这两个表的提示。我能够在mysql中编写它,但需要帮助将其转换为ms sqlSql 使用外键中的范围连接表,sql,tsql,join,Sql,Tsql,Join,我目前有两个表需要连接 第一个表是一个大表,有数百万条记录。第二个是匹配表。我想加入2号桌。预期结果表如下所示。我需要关于如何在MS-SQL中编写SQL以连接这两个表的提示。我能够在mysql中编写它,但需要帮助将其转换为ms sql Table 1 ID X Column X 1 X1 2 X2 3 X3 4 X4 5 X5 6 X6 ... ... the list goes on Table 2 ID Column
Table 1
ID X Column X
1 X1
2 X2
3 X3
4 X4
5 X5
6 X6
... ...
the list goes on
Table 2
ID Column Y
1 Y1
3 Y2
6 Y3
11 Y4
Intended result
ID X Column X Column Y
1 X1 Y1
2 X2 Y1
3 X3 Y2
4 X4 Y2
5 X5 Y2
6 X6 Y3
7 X7 Y3
8 X8 Y3
9 X9 Y3
10 X10 Y3
11 X11 Y4
12 X12 Y4
正在运行的MYSQL代码需要帮助才能转换为MS-SQL
SELECT idX, columnX, columnY
FROM (
SELECT id, columnY, @prevID AS prevID, @prevID := id
FROM table2
CROSS JOIN (SELECT @prevID := NULL) init
ORDER BY id DESC) AS t2
JOIN table1 AS t1 ON t1.idX >= t2.id AND (t2.prevID IS NULL OR t1.idX < t2.prevID)
在这两个数据库中,都可以使用相关子查询执行此操作:
select t1.*,
(select top 1 Y
from table2 t2
where t2.id <= t.id
order by t2.id desc
) as Y
from table1 t1;
当然,在MySQL中,您将使用limit而不是top
另外,查询在两个数据库中都会运行得更快,索引都在table2id,Y上。嘿,谢谢,这个答案非常有效。将在表2中创建一个索引来测试速度差