Правильно ли организовано использование INNER JOIN?

Есть в БД 3 таблицы:

  • Accounts (хранит информацию юзера)
  • Companies (хранит информацию компаний)
  • Employees (хранит id аккаунта и id компании для связи аккаунта и компании)

введите сюда описание изображения

Существует одноименный объект Java с именем Employee, который хранится в сесии у юзера. Цель - по employee_id понять что за аккаунт и к какой фирме относится.

Создал хранимую процедуру, принимающую два аргумента: company_id и account_id для получения информации из двух таблиц БД одним запросом:

// хранимая процедура, назовем её get_information
create
    definer = root@localhost procedure get_information(IN companyId bigint unsigned, IN accountID bigint unsigned)
BEGIN
    SELECT company_name, account_first_name, account_last_name, account_login
FROM accounts
INNER JOIN companies ON company_id = companyId AND account_id = accountId;
end;

UPDATE 1:

CREATE TABLE employees (
    employee_id BIGINT UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT PRIMARY KEY,
    account_id BIGINT UNSIGNED NOT NULL,
    company_id BIGINT UNSIGNED NOT NULL,
    FOREIGN KEY (account_id) REFERENCES accounts(account_id),
    FOREIGN KEY (company_id) REFERENCES companies(company_id)
);

Вопрос 1:
Правильно ли организован JOIN? Если нет, то как правильно?

Вопрос2:
Либо правильне будет создать два SELECT и объединить их UNION?


Ответы (1 шт):

Автор решения: Jake

Т.к. никто не предлагает, один из вариантов решения:

SELECT
  c.company_name,
  a.account_login
FROM employees e
INNER JOIN accounts a on a.account_id = e.account_id
INNER JOIN companies c on c.company_id = e.company_id
WHERE e.employee_id = 3
→ Ссылка