Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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_Tsql_Join - Fatal编程技术网

Sql 使用外键中的范围连接表

Sql 使用外键中的范围连接表,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

我目前有两个表需要连接

第一个表是一个大表,有数百万条记录。第二个是匹配表。我想加入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 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中创建一个索引来测试速度差