SQLITE - Использование результатов из подзапроса в том же запросе - PullRequest
0 голосов
/ 10 января 2019

Я хотел бы знать, если и если да, то как я мог бы выполнить следующее:

Допустим, у меня есть две таблицы:

Таблица A имеет два столбца: идентификатор, имя

Столбцы таблицы B: владелец, аргумент

Теперь я пытаюсь найти в таблице A все строки с определенным именем (животным) и использовать их идентификаторы, чтобы найти значение аргумента в таблице b. Эти значения аргументов являются разными идентификаторами в таблице а. В результате я хотел бы получить две колонки. Первый имеет идентификатор элемента, который имеет конкретное имя (животное), который я ищу, а второй столбец имеет имя элемента, который имеет идентификатор, который является аргументом исходных идентификаторов.

таблица а (пример)

id || name
1  || animal
2  || animal
3  || animal
4  || animal
15 || cat
16 || dog
17 || horse
18 || bird
...

таблица b (пример)

owner  || argument
1      || 15
2      || 16
3      || 17
4      || 18
...

результат (пример)

id || name
1  || cat
2  || dog
3  || horse
4  || bird

Заранее благодарим за любые подсказки / помощь.

Andreas

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вам нужно двойное соединение от tablea до tableb и снова doublea:

select 
  a.name ownwename, 
  t.name name
from tablea a
inner join tableb b
on b.owner = a.id
inner join tablea t
on t.id = b.argument 
where a.name = 'animal'

См. Демоверсию

0 голосов
/ 10 января 2019

Я верю, что следующее будет делать то, что вы хотите

SELECT owner, name FROM tableb JOIN tablea ON argument = id;

Однако, используя подзапрос, вы можете использовать: -

SELECT owner, (SELECT name FROM tablea WHERE argument = id) AS name FROM tableb;

Рабочий пример: -

DROP TABLE If EXISTS tablea;
CREATE TABLE IF NOT EXISTS tablea (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO tablea (name) VALUES ('animal'),('animal'),('animal'),('animal'),('cat'),('dog'),('horse'),('bird'),
('animal'),('cat'),('dog'),('horse'),('bird'),('animal'),
('cat'),('dog'),('horse'),('bird')    -- id's 15-18 inclusive
;

DROP TABLE IF EXISTS tableb;
CREATE TABLE IF NOT EXISTS tableb (owner INTEGER PRIMARY KEY, argument INTEGER);
INSERT INTO tableb (argument) VALUES(15),(16),(17),(18);

SELECT owner, name FROM tableb JOIN tablea ON argument = id;
SELECT owner, (SELECT name FROM tablea WHERE argument = id) AS name FROM tableb;

Результаты: -

enter image description here

и второй

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...