2014-06-16 106 views
1

我從由外部軟件生成的CSV文件創建了一個表。 在其他字段中,此表包含一個名爲「CustomID」的字段。 此表上的每一行都必須使用該字段的內容鏈接到客戶。 只要每個序列以相同的前綴開頭,每個客戶可以自行決定是否有一組或多組定製ID。 因此,例如: 顧客1可以使用「cust1_n」和「cstm01_n」(其中n是一個數字) 顧客2可以如下使用「customer2_n」使用來自表字段的多個LIKE條件選擇行

ImportedRows 
    PKID CustomID  Description 
    ---- --------------- -------------------------- 
    1 cust1_001  Something 
    2 cust1_002  ... 
    3 cstm01_000001 ... 
    4 customer2_00001 ... 
    5 cstm01_000232 ... 
    .. 

現在我已經創建2個支持表:

Customers 
    PKID Name 
    ---- -------------------- 
    1 Customer 1 
    2 Customer 2 

CustomIDs 
    PKID FKCustomerID SearchPattern 
    ---- ------------ ------------- 
    1 1   cust1_* 
    2 1   cstm01_* 
    3 2   customer2_* 

我需要實現爲所有行使用所有的L給定的客戶檢索在該客戶的CustomIDs表上找到IKE條件。 到目前爲止,我失敗了。 請提供任何線索嗎? 在此先感謝。銀色。

+2

因爲不同的dbms(甚至是版本)在可用的函數上有所不同,所以當在這裏提出SQL問題時,應該始終命名dbms。 –

+0

@ThorstenKettner更不用說,即使是基本的SQL命令或數據類型在某些邊緣情況下有時也會有不同的含義或限制。另外考慮提供一個[SQL小提琴](http://sqlfiddle.com/),銀。 – jpmc26

回答

1

要使用LIKE,您必須在模式中用%替換*。不同的dbms使用不同的函數進行字符串操作。假設有一個REPLACE函數可用:

SELECT ir.* 
FROM ImportedRows ir 
JOIN CustomIDs c ON ir.CustomID LIKE REPLACE(c.SearchPattern, '*', '%') 
WHERE c.FKCustomerID = 1; 
+0

我是多麼愚蠢......我沒有意識到我可以使用LIKE作爲JOIN條件......謝謝你的隊友!它顯然有效... – Silver