我有一个包含大量几个记录的表(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中的字段之类的记录。我如何选择与其他表中的列中的记录类似的记录?
答案 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 + '%'