SQLite: заменить значения результатов, используя биективную таблицу - PullRequest
0 голосов
/ 13 февраля 2020

В SQLite у меня есть следующий запрос

SELECT x.nameIndex, y.nameIndex
FROM relation x, relation y
WHERE x.label=y.label AND x.feature=1 AND y.feature=0;

, который возвращает все пары x.nameIndex,y.nameIndex с одинаковой меткой, где x имеет функцию 1, а y имеет функцию 0 .

Теперь у меня есть еще одна таблица index2name, где я храню имя для каждого индекса, где я могу сделать следующее:

SELECT name FROM index2name WHERE nameIndex=...;

Как я могу изменить верхний запрос так, чтобы он выглядел вверх имя для соответствующих индексов и возвращает вместо них пары имен?

1 Ответ

1 голос
/ 13 февраля 2020

Используйте CTE, который возвращает имя вместо индексов и группы для каждой строки в relation (путем объединения с index2name) и выполните самостоятельное объединение для этого:

WITH cte AS (
  SELECT i.name, r.label, r.feature 
  FROM relation r INNER JOIN index2name i
  ON i.nameIndex = r.nameIndex
)
SELECT c1.name, c2.name 
FROM cte c1 INNER JOIN cte c2
ON c2.label = c1.label
WHERE c1.feature=1 AND c2.feature=0;

или без CTE:

SELECT i1.name, i2.name 
FROM relation r1 INNER JOIN relation r2
ON r2.label = r1.label
INNER JOIN index2name i1 ON i1.nameIndex = r1.nameIndex 
INNER JOIN index2name i2 ON i2.nameIndex = r2.nameIndex 
WHERE r1.feature=1 AND r2.feature=0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...