@stasboiko

Как соединить таблицы в SQL на основе результата первого запроса?

SELECT REGEXP_SUBSTR(listinfo, ';[^;]+') as list
  FROM import AS i
  JOIN lists as l ON l.listid = list
  WHERE i.userid = 1

Получим ошибку, что колонка list неизвестна, так как колонки 'list' не существует (эта колонка является результатом запроса). Результат 'list' это не одно значение, а сразу несколько. Есть способ написать запрос в запросе? Сначала сделать запрос, который получает данные, а затем сделать еще один запрос на основе первого запроса.
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 2
@mletov
SELECT *
FROM
(
  SELECT REGEXP_SUBSTR(listinfo, ';[^;]+') as list
  FROM import
) AS i
JOIN lists as l 
ON l.listid = list
WHERE i.userid = 1
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Правильным вариантом будет нормализация таблицы `import` и вынесение связи многие-ко-многим в отдельную таблицу.
Сейчас ваше регулярное выражение вернёт только одно вхождение в listinfo для каждой строки, да и то с точкой с запятой в начале. Например, для строки '1;2;3' ваш REGEXP_SUBSTR вернёт только ';2'.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы