从子查询返回值

时间:2018-10-16 19:16:42

标签: sql subquery substring case

如何做到这一点而不必将两个表连接在一起?

CASE WHEN a.string IN(SELECT b.substring FROM b) THEN b.substring END AS [substring]
  1. b.substring具有多个值。
  2. a.string可能包含b.substring的值之一。
  3. a.string是一个注释框,所以我不能JOINb.substring

我的目标是在有匹配项时返回b.substring。这是一个示例:

  • 假设表a在列string中包含两行:stackoverflow
  • 假设表b在列substring中包含两行:so

子字符串ooverflow中,因此该行的返回值为o。 子字符串sstack中,因此该行的返回值为s

完成此任务的最佳方法是什么?

谢谢。

1 个答案:

答案 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_ab.substra.string值中的所有行。如果没有匹配项,则b.substr将返回为NULL。如果只希望有匹配项的记录,请将联接更改为INNER JOIN

结果:

id  string      substr
1   stack       s
2   overflow    o