Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с UNION при выборе разных полей
 
 автор: TetRiska   (19.04.2011 в 13:09)   письмо автору
 
 

Всем привет. Столкнулся с задачей выборки данных из 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:16)   письмо автору
 
   для: TetRiska   (19.04.2011 в 13:09)
 

как вариант создать эти поля в таблице где их нету, но это не совсем то, чего хотелось бы

  Ответить  
 
 автор: cheops   (19.04.2011 в 13:25)   письмо автору
 
   для: TetRiska   (19.04.2011 в 13:09)
 

Хм... ну и добавьте, пусть во втором запросе эти поля будут пустые. Я думаю СУБД не будет возражать, а если будет, просто добавьте во втором запросе пустых строк через запятую.

  Ответить  
 
 автор: TetRiska   (19.04.2011 в 13:47)   письмо автору
 
   для: 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

это имели ввиду? и разницы не будет если так или если бы я создал поле в базе?

  Ответить  
 
 автор: cheops   (19.04.2011 в 14:17)   письмо автору
 
   для: TetRiska   (19.04.2011 в 13:47)
 

Да, именно так (во втором запросе можно даже не именовать строки - они все-равно получат имя из первой таблицы).

>и разницы не будет если так или если бы я создал поле в базе?
Разницы не будет. Собственно этот прием применяют и в однотабличных запросах, когда для каких-то целей требуется динамический столбец.

  Ответить  
 
 автор: TetRiska   (19.04.2011 в 14:22)   письмо автору
 
   для: cheops   (19.04.2011 в 14:17)
 

благодарю :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования