MySQL - группировка с использованием MIN не работает должным образом - PullRequest
0 голосов
/ 02 марта 2019

У меня есть следующий запрос на объединение, в котором я устанавливаю фиктивный номер строки:

SELECT @row_num:=2 as row_num, id, name, admin1, admin3, admin4
  FROM locations
 WHERE feature_class IN ('P', 'A')
   AND name LIKE 'cornwall%'
UNION ALL      
SELECT @row_num:=1 as row_num, id, name, admin1, admin3, admin4
 FROM locations
WHERE feature_class = 'L' AND feature_code = 'RGN'
  AND name LIKE 'cornwall%'

Это возвращает следующие результаты:

row_num   |   id       |     name    |   admin1   |   admin3   |  admin4  
-------------------------------------------------------------------------
   2      |   2652355  |   Cornwall  |   ENG      |            |          
   1      |   11609029 |   Cornwall  |   ENG      |            |         

Теперь, когда я добавляю этот запрос какПодзапрос и использовать MIN, чтобы выбрать строку с самым низким row_num Я получаю неправильные результаты:

 SELECT MIN(t0.row_num), 
   t0.id,
   t0.name, 
   t4.name AS town_admin4,
   t3.name AS county_admin3, 
   t1.name AS admin1
  FROM (
           SELECT @row_num:=2 as row_num, id, name, admin1, admin3, admin4
            FROM locations
           WHERE feature_class IN ('P', 'A')
             AND name LIKE 'cornwall%'
           UNION ALL       
           SELECT @row_num:=1 as row_num , id, name, admin1, admin3, admin4
            FROM locations
           WHERE feature_class = 'L' AND feature_code = 'RGN'
             AND name LIKE 'cornwall%'
      ) t0
  LEFT JOIN locations t1 ON t1.admin1 = t0.admin1 AND t1.feature_code = 'ADM1'
  LEFT JOIN locations t3 ON t3.admin3 = t0.admin3 AND t3.feature_code = 'ADM3'
  LEFT JOIN locations t4 ON t4.admin4 = t0.admin4 AND t4.feature_code = 'ADM4'
  GROUP BY t0.name,
           t4.name,
           t3.name, 
           t1.name
  ORDER BY t0.name  

Я получаю следующие результаты:

MIN(t0.row_num)   |   id       |     name    |   town_admin4   |   county_admin3   |  admin1  
--------------------------------------------------------------------------------------------
       1          |   2652355  |   Cornwall  |                 |                   |  England   

Как вы можете видеть выше, неверно.Строка 1 должна быть записана с идентификатором 11609029

Почему он ведет себя так - почему оператор MIN работает не так, как ожидалось?

...