【问题标题】:How to use Index to combine data from 2 tables in SQL SERVER如何在 SQL SERVER 中使用索引组合来自 2 个表的数据
【发布时间】:2017-11-11 12:58:24
【问题描述】:

我有 2 个表,一个包含带有唯一 ID 的客户列表 (t_client),另一个包含促销代码列表 (t_promo_code)。 我已经为两个数据表创建了索引:idx_client; idx_code 和我想加入这两张表,这样每个客户都可以有一个促销代码。

我想SQL server中应该有这样的东西?

SELECT *
FROM [EMAIL].[dbo].[T_client]
JOIN [EMAIL].[dbo].[T_promo_code] ON 
(INDEX([EMAIL].[dbo].[T_client].idx_client)) = (INDEX ([EMAIL].[dbo].[T_promo_code].idx_code))

但是,我什么也找不到……而且我对 Index 真的不熟悉。如果我可以将索引变成一列,那会容易得多,但我也不知道该怎么做。 我只找到了这样一个select语句:

Select @row_index := @row_index +1 as index

但它似乎只适用于 MYSQL,而我使用的是 SQL SERVER 2008。

有什么想法吗?

【问题讨论】:

  • 你想要达到什么目的?
  • 如果索引配置得好,SQL server(通常)会为你选择最好的计划,“索引加入”发生在后台。您需要连接表中的列。查看查询的执行计划,如果仍需要调整,则修改索引。您可以指定索引的某些方面(例如:并行性),但为了您的目的,您只需要专注于编写 SQL 查询而不是索引的使用。
  • 话虽如此,为了帮助您进行此查询,我们需要知道您的 2 个表之间匹配的 2 列。这不会是客户=代码。那不会返回匹配项。请使用表格中的列更新帖子(右键单击表格,将表格脚本作为,创建到)并将其粘贴到帖子中。然后我们可以帮助您进行 JOIN 查询。
  • “每个客户都可以拥有一个促销代码”是什么意思?请张贴样本数据。忘记强制索引,这些是自动使用的

标签: sql tsql join indexing


【解决方案1】:

对不起,如果我没有说清楚。我很难加入这两个表,因为表 t_promo_code 没有任何列可以匹配 t_client。

因此,我正在考虑使用 INDEX 为他们生成共享密钥。但是,我刚刚找到了另一种解决方案,即使用 Row_number 代替 Index。

最终,我使用了下面的 SQL,并且成功了!

Select Email, 'test_campaign' AS Campaign, GEtDATE() AS DATE, Code
from(
SELECT Code, row_number() over (order by code) as row_num
FROM [t_promo_code])A
join
(SELECT Email, row_number() over (order by Email) as row_num
FROM [t_client])B
on  A.row_num=B.row_num
ORDER BY A.Code,B.Email

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2010-12-25
    • 2021-11-20
    • 2023-02-06
    相关资源
    最近更新 更多