Подтвердить что ты не робот

Запрос Mysql для объединения трех таблиц

Я использую этот запрос:

SELECT a.sales_id, d.bus_title, a.cat_id
FROM tbl_sales a
INNER JOIN tb_category b ON a.cat_id = b.cat_id
INNER JOIN tbl_business d ON d.bus_id = a.bus_id

который производит этот результат:

sales_id  | bus_title      |cat_id
----------|----------------|------------
 1        | Business 1     | 6  
 2        | Business 12    | 12
 3        | Business 123   | 25

Я изменил поле cat_id в новую таблицу с именем tb_sales_category, которая содержит поля sales_category_id, sales_id, cat_id. Как я могу написать новый запрос, присоединив эту таблицу, чтобы получить тот же результат, что и выше?

Я вроде как новый для баз данных, нуждаюсь в помощи. Спасибо заранее

4b9b3361

Ответ 1

Попробуйте следующее:

SELECT a.sales_id, d.bus_title, s.cat_id
FROM tbl_sales a
INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id
INNER JOIN tbl_business      d ON a.bus_id   = d.bus_id
INNER JOIN tb_category       b ON s.cat_id   = b.cat_id

Идея довольно проста: первое поле в вашей новой таблице tb_sales_category, которое sales_category_id работает как суррогатный ключ, не имеет ничего общего с отношениями между двумя другими таблицами. Затем мы переходим к двум другим полям, которые sales_id, cat_id, это то, что вы должны сопоставить с двумя другими сторонами отношений.

Вы не можете Join tb_category b ON a.cat_id = b.cat_id в новой схеме, потому что у нас больше нет a.cat_id, и здесь появляется новая таблица tb_sales_category, вставив ее с двумя связующими сторонами, один с INNER JOIN tb_category b ON s.cat_id = b.cat_id, а другой с INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id мы должны сделать.

Надеюсь, что это имеет смысл.

Ответ 2

Я не большой поклонник внутренних объединений, поэтому попробуйте это:

SELECT a.sales_id, a.cat_id, c.bus_title
FROM tb_sales_category a, tb_sales b, tbl_business c
WHERE a.sales_id = b.sales_id
AND b.bus_id = c.bus_id