如何做到这一点而不必将两个表连接在一起?
CASE WHEN a.string IN(SELECT b.substring FROM b) THEN b.substring END AS [substring]
b.substring
具有多个值。a.string
可能包含b.substring
的值之一。a.string
是一个注释框,所以我不能JOIN
来b.substring
。我的目标是在有匹配项时返回b.substring
。这是一个示例:
a
在列string
中包含两行:stack
和overflow
b
在列substring
中包含两行:s
和o
子字符串o
在overflow
中,因此该行的返回值为o
。
子字符串s
在stack
中,因此该行的返回值为s
。
完成此任务的最佳方法是什么?
谢谢。
答案 0 :(得分:1)
根据您的示例,这是您可以做的事情的方法。
首先,让我们创建一些测试数据:
CREATE TABLE #table_a (id INT IDENTITY(1,1), string VARCHAR(15))
CREATE TABLE #table_b (id INT IDENTITY(1,1), substr VARCHAR(15))
INSERT INTO #table_a
(string)
VALUES ('stack'),('overflow')
INSERT INTO #table_b
(substr)
VALUES ('s'),('o')
现在您可以查询数据,只有在b.substr
位于a.string
时才可以加入数据。
SELECT a.*
,b.substr
FROM #table_a a
LEFT JOIN #table_b b ON CHARINDEX(b.substr,a.string) > 0
这将为您提供#table_a
中b.substr
和a.string
值中的所有行。如果没有匹配项,则b.substr
将返回为NULL
。如果只希望有匹配项的记录,请将联接更改为INNER JOIN
。
结果:
id string substr
1 stack s
2 overflow o