как отобразить половину записи из таблицы? MYSQL

Вопрос: Я ищу MYSQL QUERY, а не PLSQL QUERY select * from aadhar limit (select count(*)/2 from aadhar); Я пытался, как это, но получить эту ошибку, пожалуйста, помогите Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ' (select count(*)/2

Вопрос:

Я ищу MYSQL QUERY, а не PLSQL QUERY

select * from aadhar limit (select count(*)/2 from aadhar);

Я пытался, как это, но получить эту ошибку, пожалуйста, помогите

Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ‘ (select count(*)/2 from aadhar ) ‘ в строке 1

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

Возможно, это не то, что вам нужно. but- “Внутри хранимых программ параметры LIMIT могут указываться с использованием целочисленных стандартных параметров или локальных переменных, начиная с MySQL 5.5.6”.

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

+——+———-+ | id | username | +——+———-+ | 1 | aaa | | 2 | Jane | | 3 | Ali | | 6 | Bruce | | 7 | Martha | | 8 | Sidney | | 10 | charlie | | 12 | Elisa | | 14 | Samantha | | 15 | Hannah | | 16 | Hannah | | 17 | Kevin | | 999 | bob | +——+———-+ 13 rows in set (0.00 sec) SELECT S.ID,S.USERNAME FROM ( SELECT U.ID,U.USERNAME, @RN:=@RN+1 ROWNUMBER, (SELECT ROUND(COUNT(*)/2) FROM USERS) TOPN FROM USERS U CROSS JOIN (SELECT @RN:=0) R ORDER BY U.ID ) S WHERE S.ROWNUMBER <= S.TOPN;

приведет к

+—-+———-+ | ID | USERNAME | +—-+———-+ | 1 | aaa | | 2 | Jane | | 3 | Ali | | 6 | Bruce | | 7 | Martha | | 8 | Sidney | | 10 | charlie | +—-+———-+ 7 rows in set (0.00 sec) Ответ №1

Как и другие ответы, уже объясненные, LIMIT не может быть динамически установлен в запросе.
Но вы можете обойти это с пользовательской переменной MySQL в сочетании с PREPARE / EXECUTE..

SET @count = (SELECT COUNT(*)/2 FROM aadhar); SET @sql = CONCAT(‘SELECT * FROM aadhar LIMIT ‘, @count); PREPARE q FROM @sql; EXECUTE q; DEALLOCATE PREPARE q;

Или (самый безопасный вариант)

SET @count = (SELECT COUNT(*)/2 FROM aadhar); PREPARE q FROM ‘SELECT * FROM aadhar LIMIT ?’; EXECUTE q USING @count; DEALLOCATE PREPARE q;

Дополнительное предупреждение

Обратите внимание, что SQL по определению является беспорядочным. Использование LIMIT без ORDER BY имеет смысла. SQL может свободно возвращать записи, которые совпадают в любом порядке, без ORDER BY означает, что выполнение одного и того же запроса дважды может привести к другому результату.

Также лучше использовать CEIL() или CAST() который конвертирует double в int, чтобы метод не выдавал ошибку, когда таблица имеет нечетное число записей, и генерирует SQL с двойным значением, подобным SELECT * FROM aadhar LIMIT 1.500000000

посмотрите демо о том, как это сделать

Ответ №2

В MySQL нет положения, позволяющего выбирать и отображать половину всех записей в таблице, пока вы не укажете скаляр в выражении LIMIT явно.

Оцените статью
Добавить комментарий