在Access中查询

时间:2009-02-17 11:32:25

标签: sql ms-access

我有2个表,我想查询它们以形成一个新表。

表1

 number    type serial index
1000001     613      3     1
1000001     613      3     1
1000001     613      3     1
1000001     613      3     1
1000001     613      4     1
1000001     613      3     1

表2

 number    type serial index
1000001     613      3     2
1000001     613      3     3
1000001     613      3     4
1000001     613      3     4
1000001     613      4     2
1000001     613      3     1

我正在寻找一个查询,它给出了这样的索引和数字的结果,并添加了索引,并给出了结果:

output table

 number  index
1000001      3
1000001      4 
1000001      5 
1000001      5 
1000001      3
1000001      2 

我想在这里阻止交叉连接。我不能使用where子句,因为两个表中的数字相同,只有索引变化。如何执行这一对一而不是一对多。

3 个答案:

答案 0 :(得分:1)

我认为不可能按照你的要求去做。您必须能够唯一地区分每一行以保证一对一的结果(这通常是您的索引列或ID列的工作)。

你可能能够用rownum来装饰某些东西,但是,如果这些表的顺序相同,那么你可能已经过度规范化了。表1和表2应该只是一个,并且在一个表中有两个索引列(index1和index2)。

答案 1 :(得分:1)

根据我对该问题的理解,您希望在每个表中的等效行上添加索引列。由于MS Access没有像数据库服务器那样的行号功能,我可以建议暂时为每个表添加一个新的自动编号字段。这将为您提供内部联接,然后添加。

假设您在两个表上调用此列tempAuto。

SELECT t1.number, (t1.index + t2.index) AS index 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.tempAuto = t2.tempAuto;

然后,您可以在执行任何数据操作后删除额外的列。

答案 2 :(得分:0)

您需要知道如何设置此计数器功能,Qcntr(): (见http://support.microsoft.com/kb/94397

Select Counter, number, Max(index) + 1 as new_Index
From
(
  (Select Number, index, Qcntr(number) as Counter from [Table 1])
   Union
  (Select Number, index, Qcntr(number) as Counter from [Table 2])
) as both_tables
Group by Counter, number

您可以在没有Counter字段的情况下将其附加到输出表。