如何组合两个查询并使用第一个查询的结果作为第二个查询的输出

时间:2015-09-01 12:53:37

标签: c++ sqlite

我有以下表格:

 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.

1 个答案:

答案 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 = ?)