Можете ли вы выполнить команду внутреннего соединения для нескольких таблиц с разными первичными ключами? - PullRequest
0 голосов
/ 15 марта 2020

Если я хочу выбрать строки из 3 разных таблиц в SQL, нужно ли мне иметь хотя бы 1 таблицу, относящуюся к обеим?

Вот мой пример:

I есть 3 таблицы - Таблица A, Таблица B и Таблица C

Таблица B имеет первичный ключ, который относится как к Таблице A, так и к C, и я могу легко связать его с помощью чего-то подобного.

В примерах кодирования Таблица A = сотрудник, Таблица B = works_with, Таблица C = клиент

SELECT employee.fname, employee.lname, client.client_name, works_with.total_sales
FROM works_with INNER JOIN client ON works_with.client_id = client.client_id 
INNER JOIN employee ON works_with.emp_id = employee.emp_id;

Так что мой приведенный выше запрос работает по очевидным причинам. Но поскольку я учусь MySQL, я пытаюсь что-то сломать и проверить, чтобы понять, каковы ограничения.

Так что это мой вопрос - есть ли способ написать запрос, как показано ниже. Пример не удался, но мне любопытно, если это возможно.

SELECT employee.fname, employee.lname, client.client_name, works_with.total_sales
    FROM employee INNER JOIN employee ON employee.emp_id = works_with.client_id FROM
    works_with INNER JOIN client ON works_with.emp_id = = client.client_id;

1 Ответ

0 голосов
/ 15 марта 2020

Ваш второй запрос:

SELECT employee.fname, employee.lname, client.client_name, works_with.total_sales
FROM employee INNER JOIN
     employee
     ON employee.emp_id = works_with.client_id
FROM works_with INNER JOIN
     client
     ON works_with.emp_id = client.client_id;

Это просто не имеет смысла. У него есть два FROM предложения. Это не синтаксически верно. Он имеет самообъединение на employee, которое не нужно для логики c, которую вы хотите. Он ссылается на works_with до того, как он будет определен в предложении FROM. Нет никакого смысла.

Я бы предложил вам написать свой первый запрос с псевдонимами таблиц:

SELECT e.fname, e.lname, c.client_name, ww.total_sales
FROM works_with ww INNER JOIN
     client c
     ON ww.client_id = c.client_id INNER JOIN
     employee e
     ON ww.emp_id = e.emp_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...