2012-07-25 168 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

相关问题