Microsoft Access - 使用/不同行数连接表

时间:2014-06-27 13:39:14

标签: sql database ms-access

我正在尝试对两个具有相似列的表进行Microsoft Access查询,除了一个表有预算编号而另一个表有实际花费的内容 这两个表具有不同的行数,并且由于两个表之间的唯一差异是信息是关于预算还是实际花费的内容,因此在查询中(使用内部联接)它会以较少的方式复制表的行行,因为它仍然匹配具有更多行的表。我认为插图会更容易解释

BudgetTable:

BCol1 | BCol2 |    BCol3   |   BCol4  | Budget
Bill  |   M   | Employed   | Single   |  $45
Mary  |   F   | Employed   | Married  |  $48
Steve |   M   | Unemployed | Divorced |  $38
Grace |   F   | Employed   | Divorced |  $48
Frank |   M   | Employed   | Single   |  $50
Bill  |   M   | Employed   | Single   |  $10
Mary  |   F   | Employed   | Married  |   $8
Grace |   F   | Unemployed | Married  |  $20

ActualTable:

ACol1 | ACol2 |   ACol3    | ACol4    | Actual
Bill  |   M   | Employed   | Single   |  $28
Mary  |   F   | Employed   | Married  |  $32
Steve |   M   | Unemployed | Divorced |  $21
Frank |   M   | Employed   | Single   |  $33
Grace |   F   | Unemployed | Married  |  $13
Grace |   F   | Employed   | Divorced |  $29

当我进行连接时,我加入了除最后一列之外的所有内容(因为没有一列是绝对有区别的特征)

但是,由于预算表中的Bill和Mary有两个条目,在查询中,它将实际表中的Bill和Mary行加倍,所以它出现了

BCol1 | BCol2 | BCol3      | BCol4    | Budget | ACol1 | ACol2 | ACol3      | ACol4    | Actual
Bill  | M     | Employed   | Single   | $45    | Bill  | M     | Employed   | Single   | $28
Mary  | F     | Employed   | Married  | $48    | Mary  | F     | Employed   | Married  | $32
Steve | M     | Unemployed | Divorced | $38    | Steve | M     | Unemployed | Divorced | $21
Grace | F     | Employed   | Divorced | $48    | Grace | F     | Employed   | Divorced | $29
Frank | M     | Employed   | Single   | $50    | Frank | M     | Employed   | Single   | $33
Bill  | M     | Employed   | Single   | $10    | Bill  | M     | Employed   | Single   | $28
Mary  | F     | Employed   | Married  | $8     | Mary  | F     | Employed   | Married  | $32
Grace | F     | Unemployed | Married  | $20    | Grace | F     | Unemployed | Married  | $13

我希望它是:

BCol1 |  BCol2 | BCol3      | BCol4    | Budget | ACol1 | ACol2 | ACol3      | ACol4    | Actual
Bill  |  M     | Employed   | Single   | $45    | Bill  | M     | Employed   | Single   | $28
Mary  |  F     | Employed   | Married  | $48    | Mary  | F     | Employed   | Married  | $32
Steve |  M     | Unemployed | Divorced | $38    | Steve | M     | Unemployed | Divorced | $21
Grace |  F     | Employed   | Divorced | $48    | Grace | F     | Employed   | Divorced | $29
Frank |  M     | Employed   | Single   | $50    | Frank | M     | Employed   | Single   | $33
Bill  |  M     | Employed   | Single   | $10    | 
Mary  |  F     | Employed   | Married  | $8     | 
Grace |  F     | Unemployed | Married  | $20    | Grace | F     | Unemployed | Married  | $13

有没有办法在Access中执行此操作?

2 个答案:

答案 0 :(得分:0)

为什么表A中的“Bill-M-Employed-Single”两次?第一个比尔,预算是45美元,与预算为10美元的法案不同吗?

如果,查看您的数据,人类无法区分两个账单,那么Access查询也不会。

您需要做的是使每个Bill都有一个唯一的标识符。事实上,他们都可以使用唯一标识符。每个表都应该有一个ID字段,您可以加入这些ID字段,而不是加入每个单独的字段。

编辑:基于评论和启示它是相同的比尔,但有两个不同的预算,那么你真的需要在预算 - 实际对之间建立联系。具有预算和实际的每个工作都应该具有某种形式的标识符。如果你问比尔他在工作上花了多少钱,他的回答肯定是:“哪一个?”

答案 1 :(得分:0)

也许像这样的查询会起作用。将它替换为列和表的名称,并且Employed Bill将显示为两行,因为他在预算表中指定了两次,但在Actual表中只指定了一次。

Select b.name, b.sex, b.employed, b.relationship, b.budget, 
a.name, a.sex, a.employed, a.relationship, a.actual
from budget b
inner join actual a
on (b.name = a.name and b.employed = a.employed)