Mysql вернуть запись с ошибками - функция агрегации MAX ()

0

mysql Ver 14.14. Распределите 5.5.60, для debian-linux-gnu (x86_64), используя readline 6.3

У меня есть одна таблица "mytable" с 12500 записями и с этими полями

  • mytable_id (PRI, auto_increment)
  • x_id (целое число)
  • y_id (целое число)
  • fieldX (VARCHAR)
  • Fieldy (VARCHAR).

При выполнении консультации:

select max(x_id), y_id, fieldX, fieldY 
from mytable;

и, например, возвращение

x_id  | y_id | fieldX | fieldY
12121 | 111  | textX  | testY

но при выполнении:

select  y_id, fieldX, fieldY 
from mytable 
where x_id = 12121;

вернуть

y_id | fieldX | fieldY
232  | textX  | textY

y_id не совпадает.

Зачем?

Теги:

2 ответа

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

Если вы хотите использовать последнюю строку, вы должны сделать

 SELECT *
 FROM mytable
 ORDER BY x_id DESC
 LIMIT 1

Проблема с вашим запросом заключается в том, что вы выбираете значение MAX из поля, а другое - случайные значения и не обязательно связаны с строкой, где это максимальное значение.

1

использование функции агрегации без группы может привести к непредсказуемому результату для столбца, не участвующего в функции агрегации и не упомянутого в группе.

вы можете использовать или функцию агрегации или порядок

  select max(x_id), max(y_id), max(fieldX), max(fieldY) 
  from mytable;

  select max(x_id), y_id, fieldX, fieldY 
  from mytable
  group by y_id, fieldX, fieldY ;

Ещё вопросы

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