Возвращаемое значение из подзапроса - PullRequest
0 голосов
/ 16 октября 2018

Как мне сделать это, не объединяя две таблицы?

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 - это поле для комментариев, поэтому я не могу JOIN его с b.substring.

Моя цель - вернуть b.substringкогда есть матчВот пример:

  • Предположим, таблица a содержит две строки в столбце string: stack и overflow
  • Предположим, таблица b содержит две строки в столбцеsubstring: s и o

Подстрока o находится в overflow, поэтому возвращаемое значение будет o для этой строки.Подстрока s находится в stack, поэтому возвращаемое значение будет s для этой строки.

Какой лучший способ сделать это?

Спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

На основе вашего примера, вот как вы можете сделать то, что вы пытаетесь сделать.

Сначала давайте создадим несколько тестовых данных:

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
...