Доступ MS, отказывающийся объединить две таблицы?

У меня есть база данных Access 2007, где у меня есть две таблицы, exp_cash и exp_cheque. Оба связаны с exp_cat, где exp_cat содержит список категорий, и exp_cash и exp_cheque содержат идентификатор, 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
1
задан marc_s 20 May 2010 в 10:58
поделиться

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

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

exp_cat_name   exp_cash_amount   exp_cheque_amount
------------   ---------------   -----------------
Salary                            50
Electricity                      200
Water Bill     120
Loan           500
2
ответ дан 3 September 2019 в 00:27
поделиться

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

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

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

немного теории по обобщению баз данных здесь

0
ответ дан 3 September 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: