表格
我有以下表格:
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- 对于之前查询中的每个选择实体,我们选择具有相同变体的所有rest实体。
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.
最佳答案
可以通过使用子查询来重用查询的结果。
在这种情况下,子查询不需要任何名称,因此不需要进行任何连接:
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 = ?)
关于c++ - 如何组合两个查询并将第一个查询的结果用作第二个查询的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332193/