访问多个SQL连接

时间:2017-11-30 11:26:26

标签: sql ms-access select join

我在Access中有两个查询返回两个表,如: (表格大约有1000行)

SELECT 
    (select count(*) 
     from Table1 T2 
     where T1.Name=T2.Name and T1.Variable1 >= T2.Variable1) as Rank,
    T1.Name,
    T1.Variable1
FROM Table1 T1

结果:

+-------+---------+------------+
| Rank  |  Name   |  Variable1 |
+-------+---------+------------+
|    1  |  Tim    |  x         |
|    2  |  Tim    |  y         |
|    3  |  Tim    |  z         |
|    1  |  Susan  |  x         |
|    2  |  Susan  |  w         |
+-------+---------+------------+

第二次查询:

SELECT (select count(*) 
        from Table2 T2 
        where T1.Name=T2.Name and T1.Variable2 >= T2.Variable2) as Rank, 
T1.Name,T1.Variable2
FROM Table2 T1

结果:

+--------+---------+------------+
|  Ran   |  Name   |  Variable2 |
+--------+---------+------------+
|     1  |  Tim    |  a         |
|     2  |  Tim    |  b         |
|     3  |  Tim    |  c         |
|     1  |  Susan  |  a         |
|     2  |  Susan  |  c         |
+--------+---------+------------+

我想链接它们:

Select distinct Table1.Name, Table1.Variable1, Table2.Variable2
from Table1, Table2
where Table1.Name=Table2.Name and Table1.Rank=Table2.Rank

结果:

+-----------+---------+-------------+------------+
|     Rank  |  Name   |  Variable1  |  Variable2 |
+-----------+---------+-------------+------------+
|        1  |  Tim    |  x          |  a         |
|        2  |  Tim    |  y          |  b         |
|        3  |  Tim    |  z          |  c         |
|        1  |  Susan  |  x          |  a         |
|        2  |  Susan  |  w          |  b         |
+-----------+---------+-------------+------------+

但该链接在访问方面效果不佳。

我也尝试通过“加入”链接它们,但性能并没有变得更好。

1 个答案:

答案 0 :(得分:0)

这些排名查询很昂贵(必须为主表的每一行执行子查询)。

在Access中堆叠/级联昂贵的查询通常表现不佳。

您最好的选择是将第一个和第二个查询更改为"创建表格" (SELECT INTO)查询,将结果存储在中间表中。

E.g。

SELECT 
    (select count(*) 
     from Table1 T2 
     where T1.Name=T2.Name and T1.Variable1 >= T2.Variable1) as Rank,
    T1.Name,
    T1.Variable1
INTO Result1
FROM Table1 T1

然后使用这些表(Result1Result2)作为JOIN的输入。