MS access отказывается объединять две таблицы? - PullRequest
1 голос
/ 19 мая 2010

У меня есть база данных 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

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Я думаю, что вы хотите, чтобы оставленные соединения вместо внутренних объединений:

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_cat_id в таблицах exp_cash и exp_cheque. Внутренние объединения показывают только то, что существует в обеих таблицах. Левое объединение показывает все в левой таблице и все, что происходит в правой таблице (или нулевые значения, если ничего не найдено).

Вот что я получу, запустив этот запрос с вашими данными:

exp_cat_name   exp_cash_amount   exp_cheque_amount
------------   ---------------   -----------------
Salary                            50
Electricity                      200
Water Bill     120
Loan           500
0 голосов
/ 20 мая 2010

Я бы настоятельно рекомендовал вам подумать о реализации обобщения в вашей модели базы данных. Это позволит вам объединить таблицы «exp_cash» и «exp_cheque». Например, вы можете добавить поле типа exp_type в таблицу exp. Добавив еще одно поле для отслеживания, если операция является либо расходом, либо доходом, вы могли бы даже иметь более общую таблицу, которую мы могли бы назвать «ope» (она означает «операции с расходами и доходами») со следующими полями:

  • ope_id
  • ope_status ("exp" или "rev")
  • ope_type (наличные, чеки, а также банковские переводы и т. Д.)
  • ope_amount (вы можете выбрать положительный для выручки / отрицательный для чисел расходов)
  • ope_date
  • ...

Таким образом, вы сможете рассчитывать сальдо (по типу, периоду и т. Д.), Не превращая его в кошмар!

некоторая теория обобщения базы данных здесь

...