Sql MS access拒绝合并两个表?
我有一个Access 2007数据库,其中有两个表,exp\ U cash和exp\ U CHECK。两者都链接到exp_cat,其中exp_cat包含类别列表,exp_cash和exp_check包含id、cat_id、exp_日期、exp_金额和exp_注释 当我尝试组合它们时,结果中不会显示任何内容,除非我从查询中删除cat_名称。我使用了一个简单的查询:Sql MS access拒绝合并两个表?,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我有一个Access 2007数据库,其中有两个表,exp\ U cash和exp\ U CHECK。两者都链接到exp_cat,其中exp_cat包含类别列表,exp_cash和exp_check包含id、cat_id、exp_日期、exp_金额和exp_注释 当我尝试组合它们时,结果中不会显示任何内容,除非我从查询中删除cat_名称。我使用了一个简单的查询: SELECT DISTINCT exp_cat.cat_name, exp_cash.exp_amount,
SELECT DISTINCT
exp_cat.cat_name,
exp_cash.exp_amount,
exp_cheque.exp_amount
FROM (exp_cat INNER JOIN exp_cash
ON exp_cat.ID = exp_cash.exp_cat_id)
INNER JOIN exp_cheque
ON exp_cat.ID = exp_cheque.exp_cat_id;
表exp\U cat包含
exp_cat_name
exp_cat_id
exp_cat_id ----- exp_cat_name
1 ----- Salary
2 ----- Electricity
3 ----- Water Bill
4 ----- Loan
表exp\U现金包含
exp_cash_id
exp_date
exp_cat_id
exp_cash_amount
exp_invoice_no
exp_cash_id ----- exp_date ---- exp_cat_id ---- exp_cash_amount ---- exp_invoice_no
1 ----- 15/05/2010 -- 2 ---- 200 ---- 25AB5245
2 ----- 17/05/2010 -- 1 ---- 50 ---- 58624AA
exp_cheque_id
exp_date
exp_cat_id
exp_cheque_amount
exp_invoice_no
exp_cheque_id ----- exp_date ---- exp_cat_id -- exp_cheque_amount -- exp_invoice_no
1 ----- 15/05/2010 -- 3 -- 120 -- 25AB5245
2 ----- 17/05/2010 -- 4 -- 500 -- 58624AA
表exp\u cheue包含
exp_cash_id
exp_date
exp_cat_id
exp_cash_amount
exp_invoice_no
exp_cash_id ----- exp_date ---- exp_cat_id ---- exp_cash_amount ---- exp_invoice_no
1 ----- 15/05/2010 -- 2 ---- 200 ---- 25AB5245
2 ----- 17/05/2010 -- 1 ---- 50 ---- 58624AA
exp_cheque_id
exp_date
exp_cat_id
exp_cheque_amount
exp_invoice_no
exp_cheque_id ----- exp_date ---- exp_cat_id -- exp_cheque_amount -- exp_invoice_no
1 ----- 15/05/2010 -- 3 -- 120 -- 25AB5245
2 ----- 17/05/2010 -- 4 -- 500 -- 58624AA
我想你想要的是左连接而不是内连接:
SELECT exp_cat.exp_cat_name,
exp_cheque.exp_cash_amount,
exp_cash.exp_cheque_amount
FROM (exp_cat LEFT JOIN exp_cash
ON exp_cat.exp_cat_id = exp_cash.exp_cat_id)
LEFT JOIN exp_cheque
ON exp_cat.exp_cat_id = exp_cheque.exp_cat_id;
否则,您必须在exp_现金和exp_支票表中具有相同的exp_cat_id。
内部联接只显示两个表中存在的内容。左连接显示左表中的所有内容,以及右表中匹配的所有内容(如果没有匹配项,则显示空值)
以下是使用您的数据运行该查询时得到的结果:
exp_cat_name exp_cash_amount exp_cheque_amount
------------ --------------- -----------------
Salary 50
Electricity 200
Water Bill 120
Loan 500
我强烈建议您考虑在数据库模型中实现泛化。它将允许您合并“exp_现金”和“exp_支票”表。例如,您可以在“exp”表中添加一个字段,如“exp\u type”。 如果操作是费用或收入,则通过添加另一个字段进行后续操作,您甚至可以有一个更通用的表,我们可以将其称为“ope”(它代表“费用和收入操作”),其中包含以下字段:
- 操作id
- 操作状态(exp或rev)
- 操作类型(现金、支票、银行转账等)
- 营业金额(您可以选择收入为正/支出为负)
- 开放日期
关于数据库泛化的一些理论有点不清楚您想要什么。可能是每个表中的一些示例数据,以及您希望作为输出的示例?嘿,很抱歉,这是我的错误,谢谢您的注意,您使用的是“查询设计”窗口吗?你有约翰要求的样本数据吗?每个表中只有几行就足够了。嘿,那里@Remou谢谢你指出我忘了添加它了再次感谢,你希望得到什么输出?