Я запускаю MySQL 5.1.71. В моей базе данных есть три таблицы - загрузка, латунь и mfg с нагрузкой, которая является моей «основной» таблицей. Моя цель - запросить загрузку и включить mfg.name в результаты. Я пробовал различные итерации JOIN
статей и подзапросов как с предложениями WHERE
, так и без них. Кажется, это должно быть довольно тривиально, поэтому я не уверен, как я не могу прийти к решению.SQL Join vs Sub-query
load
-------------------------
| id | desc | brass_id |
-------------------------
| 1 | One | 2 |
| 2 | Two | 1 |
-------------------------
brass
---------------
| id | mfg_id |
---------------
| 1 | 6 |
| 2 | 8 |
---------------
brass_mfg
------------------------
| id | name |
------------------------
| 6 | This Company |
| 8 | That Company |
------------------------
Мои желаемые результаты будут ...
results
---------------------------
| load | mfg |
---------------------------
| One | That Company |
| Two | This Company |
---------------------------
- нагрузка ID всегда будет иметь только один латунный ID
- Духовой ID всегда будет иметь только один MFG ID
ED IT
Обновленные ранее данные образца (см. Выше) были обновлены. Кроме того, ниже приведен запрос, который я запускаю, и результаты, которые я получаю. Компания ошибается в каждой записи, которая возвращается. Я включил в запрос и результаты идентификаторы по всем таблицам. Имена компаний, которые отображаются, не являются именами для идентификаторов в таблице mfg.
SELECT
load.id AS "load.id",
load.brass_id AS "load.brass_id",
brass.id AS "brass.id",
brass.mfg_id AS "brass.mfg_id",
brass_mfg.id AS "brass_mfg.id",
brass_mfg.name AS "brass_mfg.name"
FROM `load`
LEFT JOIN brass ON load.brass_id = brass.id
LEFT JOIN brass_mfg ON brass.id = brass_mfg.id
-----------------------------------------------------------------------------------------
| load.id | load.brass_id | brass.id | brass.mfg_id | brass_mfg.id | brass_mfg.name |
-----------------------------------------------------------------------------------------
| 1 | 2 | 2 | 6 | 2 | Wrong Company |
| 2 | 1 | 1 | 8 | 1 | Incorrect Company |
-----------------------------------------------------------------------------------------
Соединения являются основными строительными блоками SQL-запросов. Они должны быть вашим первым вариантом. Чтобы оптимизировать, посмотрите на индексы. – MatBailie
Я действительно не вижу проблемы здесь. – Strawberry
Стоит упомянуть, что ваш желаемый результат выглядит так, как будто вы предполагаете, что каждый 'продукт' будет иметь одну' mfg', а таблицу ассоциаций - 'lot' - обычно используется во многих отношениях для многих ... Помните об этом! – Darek