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
具有特征 1
,y
具有特征 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;
在 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
具有特征 1
,y
具有特征 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;