|
|
|
| Всем привет. Столкнулся с задачей выборки данных из 2-х таблиц у которых нужно выбрать разное количество полей, если одинаковое, то юнион подходит, а по другому не могу понять как сделать выборку. Помогите пожалуйста.
SELECT a.`em_produce_name` as pp_name,
a.`em_produce_desc_short` as pp_desc,
a.`em_produce_price_ua` as pp_price_ua,
a.`em_produce_price_us` as pp_price_us,
a.`em_produce_price_eu` as pp_price_eu,
a.`em_produce_image_sm` as pp_image,
a.`em_produce_url` as pp_url,
a.`em_produce_data_upd` as pp_data_upd,
a.`em_element_id` as pp_element,
b.`em_brand_name` as pp_brand_name,
b.`em_brand_id` as pp_brand_id,
c.`em_category_name` as pp_category_name,
c.`em_category_id` as pp_category_id
FROM `em_produce` a
LEFT JOIN `em_brand` b ON (b.`em_brand_id` = a.`em_brand_id` AND b.`em_brand_access` = 'y' AND b.`em_brand_deleted` = 'n')
LEFT JOIN `em_category` c ON (c.`em_category_id` = a.`em_produce_group` AND c.`em_category_access` = 'y' AND c.`em_category_deleted` = 'n')
WHERE `em_company_id` = 2137
AND `em_produce_access` = 'y'
AND `em_produce_deleted` = 'n'
UNION ALL
SELECT a.`em_service_name` as pp_name,
a.`em_service_desc` as pp_desc,
a.`em_service_price_ua` as pp_price_ua,
a.`em_service_price_us` as pp_price_us,
a.`em_service_price_eu` as pp_price_eu,
a.`em_service_image` as pp_image,
a.`em_service_url` as pp_url,
a.`em_service_data_upd` as pp_data_upd,
a.`em_element_id` as pp_element,
b.`em_brand_name` as pp_brand_name,
b.`em_brand_id` as pp_brand_id,
c.`em_category_name` as pp_category_name,
c.`em_category_id` as pp_category_id
FROM `em_service` a
LEFT JOIN `em_brand` b ON (b.`em_brand_id` = a.`em_brand_id` AND b.`em_brand_access` = 'y' AND b.`em_brand_deleted` = 'n')
LEFT JOIN `em_category` c ON (c.`em_category_id` = a.`em_service_group` AND c.`em_category_access` = 'y' AND c.`em_category_deleted` = 'n')
WHERE `em_company_id` = 2137
AND `em_service_access` = 'y'
AND `em_service_deleted` = 'n'
ORDER BY pp_name ASC
|
Этот запрос нормально мне выбирает, но мне нужно в первый селект еще добавить такие поля как:
a.`em_produce_year`,
a.`em_produce_distance`,
a.`em_produce_motohours`,
a.`em_produce_flyhours`,
a.`em_produce_valume`,
a.`em_produce_country`,
a.`em_produce_color`,
a.`em_produce_maxspeed`,
a.`em_produce_fuelflou`,
a.`em_produce_tub`,
|
но их нету во второй таблице. Каким методом делать тогда выборку? Спасибо. | |
|
|
|
|
|
|
|
для: TetRiska
(19.04.2011 в 13:09)
| | как вариант создать эти поля в таблице где их нету, но это не совсем то, чего хотелось бы | |
|
|
|
|
|
|
|
для: TetRiska
(19.04.2011 в 13:09)
| | Хм... ну и добавьте, пусть во втором запросе эти поля будут пустые. Я думаю СУБД не будет возражать, а если будет, просто добавьте во втором запросе пустых строк через запятую. | |
|
|
|
|
|
|
|
для: cheops
(19.04.2011 в 13:25)
| | первый селект:
c.`em_category_id` as pp_category_id,
a.`em_produce_year` as pp_year
|
второй селект
c.`em_category_id` as pp_category_id,
'' as pp_year
|
это имели ввиду? и разницы не будет если так или если бы я создал поле в базе? | |
|
|
|
|
|
|
|
для: TetRiska
(19.04.2011 в 13:47)
| | Да, именно так (во втором запросе можно даже не именовать строки - они все-равно получат имя из первой таблицы).
>и разницы не будет если так или если бы я создал поле в базе?
Разницы не будет. Собственно этот прием применяют и в однотабличных запросах, когда для каких-то целей требуется динамический столбец. | |
|
|
|
|
|
|
|
для: cheops
(19.04.2011 в 14:17)
| | благодарю :) | |
|
|
|