我有一个Access 2007数据库,其中有两个表,exp_cash和exp_cheque。两者都链接到exp_cat,其中exp_cat包含类别列表,exp_cash和exp_cheque包含id,cat_id,exp_date,exp_amount和exp_note。
当我尝试将它们组合时,除非我从查询中删除cat_name,否则结果中不会显示任何内容。我使用了一个简单的查询:
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_cat包含
exp_cat_name
exp_cat_id
exp_cat_id ----- exp_cat_name
1 ----- Salary
2 ----- Electricity
3 ----- Water Bill
4 ----- Loan
表exp_cash包含
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_cheue包含
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
答案 0 :(得分:2)
我认为你想要的是左连接而不是内连接:
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_cash和exp_cheque表中的exp_cat_id必须相同。 内部联接仅显示两个表中存在的内容。左连接显示左表中的所有内容,以及右手表中匹配的任何内容(如果没有匹配,则显示空值)。
以下是我使用您的数据运行查询时得到的结果:
exp_cat_name exp_cash_amount exp_cheque_amount
------------ --------------- -----------------
Salary 50
Electricity 200
Water Bill 120
Loan 500
答案 1 :(得分:0)
我强烈建议您考虑在数据库模型中实现泛化。它允许您合并'exp_cash'和'exp_cheque'表。例如,您可以在'exp'表中添加诸如'exp_type'之类的字段。 如果操作是费用或收入,通过添加另一个字段进行跟进,您甚至可以使用以下字段来创建一个更通用的表,我们称之为“ope”(它代表“费用和收入操作”):
通过这种方式,您可以计算余额(每种类型,期间等)而不会成为噩梦!
关于数据库概括的一些理论here