从另一个表中的列中选择记录等项目

时间:2012-07-25 04:06:15

标签: sql sql-server sql-server-2008

我有一个包含大量几个记录的表(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

afaik我只会得到foo.field1 = foo2.field1的记录。我似乎无法使用ON foo.field1 LIKE foo2.field2来选择foo2中的字段之类的记录。我如何选择与其他表中的列中的记录类似的记录?

3 个答案:

答案 0 :(得分:9)

你有没有试过像

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

答案 1 :(得分:3)

怎么样,

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;

注意,如果字符串包含'%'通配符,则此方法有效。

答案 2 :(得分: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 + '%'