我有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子句,因为两个表中的数字相同,只有索引变化。如何执行这一对一而不是一对多。
答案 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字段的情况下将其附加到输出表。