2010-05-19 67 views
1

我有一個Access 2007數據庫,我有兩個表,exp_cash和exp_cheque。兩者都鏈接到exp_cat,其中exp_cat包含類別列表,exp_cash和exp_cheque包含id,cat_id,exp_date,exp_amount和exp_note。MS訪問拒絕合併兩個表?

當我試圖合併它們時,除非從查詢中刪除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 
+3

有點不清楚你想要什麼。也許是每個表格中的一些示例數據,以及您希望作爲輸出結果的示例? – John 2010-05-19 17:49:50

+0

嘿那裏對不起,這是我的錯誤感謝您的筆記 – Mahmoud 2010-05-19 18:12:07

+0

您是否正在使用查詢設計窗口?你有約翰要求的樣本數據嗎?每張桌子只要幾行就足夠了。 – Fionnuala 2010-05-19 18:27:16

回答

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。 內部連接只顯示兩個表中存在的內容。左連接顯示左表中的所有內容,以及右表中匹配的所有內容(如果沒有匹配,則爲null值)。

這裏就是我得到的,當我運行的查詢與您的數據:

exp_cat_name exp_cash_amount exp_cheque_amount 
------------ --------------- ----------------- 
Salary       50 
Electricity      200 
Water Bill  120 
Loan   500 
0

我會強烈建議你考慮你的數據庫模型實現的推廣。它將允許你合併'exp_cash'和'exp_cheque'表。例如,你可以在'exp'表中添加一個字段,如'exp_type'。 如果操作是費用或收入,通過添加另一個字段來跟進,您甚至可以擁有一個更通用的表格,我們可以將其稱爲「ope」(它代表「費用和收入操作」),幷包含以下字段:

  • ope_id
  • ope_status(或 「EXP」 或 「轉」)
  • ope_type(現金,支票,而且銀行匯款等)
  • ope_amount(你可以選擇有積極的來回收入/負數的費用)
  • ope_date
  • ...

這樣,你就可以計算餘額(按類型,期限等),而不使其成爲一個噩夢!

關於數據庫泛化的一些理論here