SQLite3 объединить ответы

Рейтинг: 0Ответов: 1Опубликовано: 27.02.2023

У меня есть необходимость получить совмещенный результат выполнения двух SQL-запросов.

Пускай это будет примитив:

SELECT name FROM table1 WHERE id=1
SELECT role FROM table2 WHERE subject_name='Пупкин'

Я могу обратиться к таблице role и получить нужные мне сведения запросом

SELECT role FROM table2 WHERE subject_name=(SELECT name FROM table1 WHERE id=1)

но тогда ответом будет только role из table2, но нужно еще вывести и name из table1. Можно было бы в коде приложения использовать полученные данные из первого запроса (table1), формировать готовую таблицу и "дотягивать" для каждой строчки значение из второй таблицы (table2) новым запросов, но дорабатывать приложение возможности нет и следует решать проблему только средствами SQLite.

Также пошарив в сети я нашел оператор UNION с помощью которого можно собрать конструкцию

SELECT name FROM table1 WHERE id=1 UNION SELECT role FROM table2 WHERE subject_name=(SELECT name FROM table1 WHERE id=1)

Но в таком случае возвращается ответ в виде строк таблиц:

name
1
Пупкин

а необходимо:

id name role
1 Пупкин Главный

UPD: +/- структура таблиц ниже, входными данными будет только значение id из table1, результатом должна быть таблица с колонками id, role, например

table1

id name
1 Пупкин
2 Не Пупкин

table2

role name
Главный Пупкин
Не главный Не Пупкин

Ответы

▲ 1Принят

На вид это обычный SELECT из нескольких таблиц:

SELECT a.id, a.name, b.role FROM table1 a, table2 b
WHERE a.id=1 and a.name=b.subject_name and b.subject_name='Пупкин'

Ну, либо через JOIN тоже самое:

SELECT a.id, a.name, b.role FROM table1 a
JOIN table2 b on a.name=b.subject_name
WHERE a.id=1 and b.subject_name='Пупкин'