2012-07-25 170 views
3

我有一個包含大量幾條記錄的表(foo),我只想選擇那些與另一個表(foo2)中某個字段中的記錄之一相似的記錄從另一個表中的列中選擇記錄等項目

如果我做一個內SELECT查詢加入

SELECT pst_qty AS [QTY] 
    ,[MFGPN] 
    ,[mfg_name] AS [MANUFACTURER] 
    ,description 
    ,sup_id 
    FROM [foo] 
    INNER JOIN [foo2] 
    ON [foo].[MFGPN] = [foo2].TestString 

據我所知,我只會得到記錄,其中foo.field1 = foo2.field1。我似乎無法使用ON foo.field1 LIKE foo2.field2來選擇記錄,如foo2中的字段。我該如何選擇類似於不同表格中的記錄的記錄?

+1

試試吧是的,你可以 – codingbiz 2012-07-25 04:09:51

+0

你能否詳細說明一下,比如你可以列出你的foo2表的列嗎? – alexm 2012-07-25 04:10:08

回答

8

您是否嘗試過類似

SELECT pst_qty AS [QTY] 
    ,[MFGPN] 
    ,[mfg_name] AS [MANUFACTURER] 
    ,description 
    ,sup_id 
    FROM [foo] 
    INNER JOIN [foo2] 
    ON [foo].[MFGPN] LIKE '%' + [foo2].TestString + '%' 
+0

真棒回答! – hiropon 2017-07-07 05:51:59

0
SELECT pst_qty AS [QTY] 
. 
. 
. 
    FROM [foo] 
     where [foo].[MFGPN] LIKE '%123%' 
      or [foo].[MFGPN] LIKE '%123%' 
      or [foo].[MFGPN] LIKE '%123%' 

可以工作,但需要進行全表掃描,因爲在該列任何索引將被忽略。所以,而不是它,下面可以嘗試。

SELECT pst_qty AS [QTY] 
. 
. 
. 
    FROM [foo] 
    INNER JOIN [foo2] 
     ON [foo].[MFGPN] LIKE '%' + [foo2].TestString + '%' 
+0

隨着你的第二個建議,索引也將被忽略。在'LIKE'%something%''測試的列上可能沒有辦法啓用索引使用。 – 2012-07-25 12:05:56

+0

是的,你可能對我的第二個建議是正確的。我只是在執行流程中檢查它。但至少它給出了由user1542296發佈的查詢的答案:) – 2012-07-25 14:13:55

+0

@帶引導通配符的AndriyM表達式不能從索引中受益。表演會很糟糕。如果性能是一個問題調查全文索引 – Jodrell 2018-02-14 14:31:11

1

怎麼樣,

SELECT DISTINCT 
      F.[pst_qty] [QTY], 
      F.[MFGPN], 
      F.[mfg_name] [MANUFACTURER], 
      F.[description], 
      F.[sup_id] 
    FROM 
      [foo] F 
     CROSS JOIN 
      [foo2] F2 
    WHERE 
      CHARINDEX(F2.[MFGPN], F.[TestString]) > 0; 

注意,這將工作,如果字符串包含的'%'通配符。

+0

是。所有其他答案都受到通配符注入(如果有這樣的事情)。 – 2018-02-14 14:25:55

相關問題