Правильно ли организовано использование 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
