MYSQL вопрос выдачи при слиянии

0

Привет, у меня есть запрос MYSQL, как показано ниже:

SELECT COUNT(od.id)+IFNULL((SELECT COUNT(rmrs.id)
FROM ic_dd_results rmrs
WHERE rmd.horse_id = od.horse_mraid AND rmrs.finish_pos = '1'),0) as count_win
FROM ic_dd_old_data od
WHERE od.horse_mraid = '123123' AND od.pl='1'

Запрос вернет правильные данные, когда первый запрос count_win будет соответствовать finish_pos =1, но когда второй запрос не имеет данных для pl='1', он будет игнорировать первый запрос. Я хочу, чтобы общее количество результатов запроса возвращалось путем объединения как 1-го, так и 2-го.

  • 0
    Какой у Вас вопрос?
  • 2
    Пожалуйста, предоставьте структуру таблицы, образец данных и желаемый результат. Также обязательно уточните свой вопрос.
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Кажется, вы просто ищете

select 
  (select count(*) from ic_dd_old_data where horse_mraid = 123123 and pl = 1) +  
  (select count(*) from ic_dd_results where horse_id = 123123 and finish_pos = 1);
  • 0
    Я тоже так думал.
  • 0
    Может быть, оба будут работать, разделив оператор подсчета. Полный код приведен ниже: я пропустил внутреннюю часть соединения, так как перепутал с запросом все в 1. <code> SELECT COUNT (CASE WHEN od.pl = '1' THEN od.id END) + IFNULL ((SELECT COUNT (rmrs.id) ИЗ ic_dd_results rmrs ВНУТРЕННЕЕ СОЕДИНЕНИЕ ic_dd_race rmr ВКЛ rmr.track_id = rmrs.track_id И rmr.post_id = rmrs.post_id ВНУТРЕННЕЕ СОЕДИНЕНИЕ ic_dd_declaration .horse_id = od.horse_mraid AND rmrs.finish_pos = '1'), 0) as count_win FROM ic_dd_old_data od WHERE od.horse_mraid = '". $ horse_mra."'
Показать ещё 5 комментариев
0

Я думаю, вы также можете сделать это с помощью условной агрегации вместо фильтрации pl=1 в разделе where

SELECT COUNT(CASE WHEN od.pl='1' THEN od.id END) + 
       IFNULL((SELECT COUNT(rmrs.id)
               FROM ic_dd_results rmrs
               WHERE rmd.horse_id = od.horse_mraid AND 
               rmrs.finish_pos = '1'),0) as count_win
FROM ic_dd_old_data od
WHERE od.horse_mraid = '123123' 
  • 0
    спасибо за ваш быстрый код, и он работает отлично! Цените так много.
  • 0
    Это не очень хороший запрос. Это работает только потому, что все строки в промежуточном результате имеют одинаковое значение count_win, из которых выбирается произвольно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню