我有以下表格:
entite var_entite variation
ID | NAME ID_entite|id_var ID | NAME
1 | x1 1 | 1 1 | y1
2 | x2 1 | 2 2 | y2
3 | x3 1 | 3 3 | y3
2 | 1 4 | y4
2 | 4 5 | y5
3 | 2
3 | 5
CREATE TABLE ENTITE (ID PRIMARY KEY NOT NULL, NAME STRING)
CREATE TABLE VAR_ENTITE(ID_ENTITE INTEGER NOT NULL,
ID_VARIATION INTEGER NOT NULL,
FOREIGN KEY (ID_ENTITE) REFERENCES ENTITE(ID),
FOREIGN KEY (ID_VARIATION) REFERENCES VARIATIONS(ID);
CREATE TABLE VARIATIONS (ID PRIMARY KEY NOT NULL, NAME STRING)
我正在使用sqlite3
。 ?
代表输入变量。
1-对于表x
中的每个实体entite
,我们要选择其变体y
SELECT e.id, e.name, v.name FROM var_entite ve
JOIN entite as e ON e.id_entite = ve.id_entite
JOIN variations as v ON v.id = ve.id_var;
2-对于上一个查询中的每个所选实体,我们选择具有相同版数的所有其他实体。
SELECT e.id, e.name, v.name FROM var_entite ve
JOIN entite as e ON e.id = ve.id
JOIN variations as v ON v.id = ve.id_var
where e.id <> ? and v.name =? ;
e.id_entite <> ?
用于与查询1具有不同实体的其他实体
v.name =?
如果实体与 1 中返回的实体具有相同的变体,那么我们选择它
我的问题如下:
查询1:
1,x1,y1
1,x1,y2
1,x1,y3
2,x2,y1
2,x2,y4
3,x3,y2
3,x3,y5
查询 id = 1
的实体的2个输出 2,x2,y1
3,x3,y2
查询具有 id = 2
的实体的2输出 1,x1,y1
etc.
答案 0 :(得分:1)
可以使用子查询重用查询结果。
在这种情况下,子查询不需要任何名称,因此不需要进行任何连接:
SELECT e.id, e.name, v.name
FROM var_entite ve
JOIN entite as e ON e.id = ve.id_entite
JOIN variations as v ON v.id = ve.id_variation
WHERE e.id <> ?
AND v.id IN (SELECT id_variation
FROM var_entite
WHERE id_entite = ?)