Join

基於列中包含的變數值連接表

  • March 8, 2018

我有兩個表,其中日期作為要加入的主要列。但是,我還需要根據一個列中的值進行連接,該值部分包含在另一個表的列中。

Table 1: date, audience

Table 2: date, channel

表 1 中的“ audience”具有部分包含在表 2 中的“通道”中的值,如下所示:

audience = "oldpeople"

channel = "oldpeople_email"

有數百個潛在的“受眾”值和“渠道”值,所以我無法命名這些值,它必須動態工作。這是我嘗試過但沒有奏效的方法:

SELECT * FROM table1 
left JOIN table2 ON ((table2.Channel like '%table1.audience%')
    AND (table2.date = table1.date) )

使用您編寫該連接條件的方式,SQL Server 將準確搜尋“table1.audience”,而不是列值。單引號內的列名僅被視為字元串文字,而不是基礎列值。

試試這個:

SELECT * 
FROM table1 
LEFT JOIN table2 
ON ((table2.Channel like '%' + table1.audience + '%') 
AND (table2.date = table1.date))

這將連接 table1.audience 中包含的值並將其包裝在萬用字元中。

如果沒有必要,我建議刪除前導萬用字元,因為如果您正在處理大型數據集(因為您將強制掃描),這將顯著影響性能。

引用自:https://dba.stackexchange.com/questions/199665