SQLite:使用双射 table 替换结果值

SQLite: replace result values using bijective table

在 SQLite 中,我有以下查询

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

returns 所有具有相同标签的 x.nameIndex,y.nameIndex 对,其中 x 具有特征 1y 具有特征 0

现在我有另一个 table index2name 用于存储每个索引的名称,我可以在其中执行以下操作:

SELECT name FROM index2name WHERE nameIndex=...;

如何更改顶部查询,使其查找相应索引的名称和 returns 对名称?

使用 CTE returns 名称而不是 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;