|
|
|
| Всем привет. Не хочется плодить кучу запросов, вот и пытаюсь постичь идеального решения в выборках из многих таблиц в одном запросе. Сперва я делаю 1 запрос к одной таблице после чего делаю объединения с другими таблицами. Но тут подводный камень, т. к. при объединение с другими таблицами в них может не быть той записи с ИД которой мы связываем.
Если писать так:
SELECT `em_business_group_simage`,
a.`em_business_group_name`,
a.`em_business_group_data`,
a.`em_business_group_desc`,
a.`em_business_group_id`,
a.`em_business_group_direct`,
a.`em_business_group_category`,
b.`em_business_group_stat_overal`
FROM `em_business_group` a
JOIN `em_business_group_stat` b ON (a.`em_business_group_id` = b.`em_business_group_id`)
WHERE `em_company_id` = 2137
AND a.`em_business_group_module` = 'produce'
AND a.`em_business_group_access` = 'y'
AND a.`em_business_group_deleted` = 'n'
|
Мне выдаст 1 запись, их всего 3, у каждой из которых есть связь с другой таблицей, но только у одной есть запись в связываемой таблице. Этот вариант не подошел т. к. заставляет делать запрос без объединения и потом писать еще один. Я всего лишь дописал LEFT и тогда выбрало все, мне так и надо.
SELECT `em_business_group_simage`,
a.`em_business_group_name`,
a.`em_business_group_data`,
a.`em_business_group_desc`,
a.`em_business_group_id`,
a.`em_business_group_direct`,
a.`em_business_group_category`,
b.`em_business_group_stat_overal`
FROM `em_business_group` a
LEFT JOIN `em_business_group_stat` b ON (a.`em_business_group_id` = b.`em_business_group_id`)
WHERE `em_company_id` = 2137
AND a.`em_business_group_module` = 'produce'
AND a.`em_business_group_access` = 'y'
AND a.`em_business_group_deleted` = 'n'
|
Мучает только одно, хуже таким объединением я не сделаю, если связываю с таблицей записи в которой может еще не существовать до выборки? | |
|
|
|
|
|
|
|
для: TetRiska
(06.04.2011 в 10:50)
| | Это нормальная практика, с LEFT JOIN вы держите руку на пульсе и всегда знаете, что из левой таблицы вы получите гарантировано все записи по условию. Отсутствие соответствия в правой таблице всегда можно проконтролировать по NULL в прикладном коде. Собственно, LEFT JOIN используется раз в пять чаще, чем JOIN. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2011 в 11:32)
| | спасибо | |
|
|
|