2017-06-09 32 views
0

我有2个表,其中一个包含具有其唯一ID的客户列表(t_client),另一个包含促销代码列表(t_promo_code)。 我已经创建了两个数据表的索引:idx_client; idx_code,我想加入这两张表,以便每个客户都可以获得促销代码。如何使用索引合并来自SQL SERVER中的2个表的数据

我想应该有这样的SQL服务器?

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)) 

但是,我找不到任何东西......而且我对索引并不熟悉。如果我可以将索引转换成一列,那将会容易得多,但我也不知道该怎么做。 我只发现了一个选择句子是这样的:

Select @row_index := @row_index +1 as index 

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

任何想法?

+0

你想达到什么目的? –

+1

如果索引配置良好,SQL服务器将(通常)为您选择最佳计划,并且“索引合并”发生在后台。你需要加入表格中的列。查看查询的执行计划,如果它仍然需要调整,那么修改您的索引。您可以指定索引的某些方面(例如:并行性),但出于您的目的,您只需将注意力集中在编写SQL查询并减少索引使用情况。 –

+0

话虽如此,对于我们来说,帮助您完成这个查询,我们需要知道2个表格之间匹配的2列。哪一个不会是client = code。这不会返回匹配。请使用表格中的列更新帖子(右键单击表格,脚本表格为,创建)并将其粘贴到帖子中。然后我们可以帮助您使用JOIN查询。 –

回答

0

对不起,如果我没有说清楚。我很难加入这两个表,因为表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 
相关问题