2017-06-09 33 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 
相關問題