Je recherche MYSQL QUERY, pas PLSQL QUERY
select * from aadhar limit (select count(*)/2 from aadhar);
J'ai essayé d'aimer ça mais j'obtiens cette erreur s'il vous plaît aider
Code d'erreur: 1064. Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de '
(sélectionnez count (*) / 2 depuis aadhar)' à la ligne 1
5 Réponses :
Il n'y a aucune disposition dans MySQL pour sélectionner et afficher la moitié du total des enregistrements dans la table jusqu'à ce que vous ne spécifiez pas explicitement le scalaire dans la clause LIMIT.
Peut-être pas ce que vous aimeriez mais- 'Dans les programmes stockés, les paramètres LIMIT peuvent être spécifiés en utilisant des paramètres de routine à valeur entière ou des variables locales à partir de MySQL 5.5.6.' https://dev.mysql.com/doc/refman/5.5/ fr / select.html
SI vous ne voulez pas utiliser SQL dynamique ou une procédure stockée mais que vous avez un moyen de classer votre table puis la simulation du numéro de ligne (avant la version 8) ou la fonction de fenêtre row_number ( version 8 sur) peut aider. Étant donné
+----+----------+ | ID | USERNAME | +----+----------+ | 1 | aaa | | 2 | Jane | | 3 | Ali | | 6 | Bruce | | 7 | Martha | | 8 | Sidney | | 10 | charlie | +----+----------+ 7 rows in set (0.00 sec)
entraînera
+-----+----------+
| 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;
ce n'est pas pour Dans les programmes enregistrés. je veux juste sélectionner les premiers enregistrements de 50% à partir d'une table car je sais que la requête dans PLSQL est select rownum, e. * from aadhar a where rownum <= (select count (*) / 2 from aadhar);
MYSQL n'est pas plsql - il n'y a pas d'équivalent de rownum dans mysql.
Salut P.Salmon. Je sais que PLSQL et MYSQL sont différents. ici, je dois connaître la requête équivalente pour obtenir les premiers 50% des enregistrements d'une table
Comme les autres réponses déjà expliquées, LIMIT ne peut pas être défini dynamiquement dans une requête.
Mais vous pouvez le contourner avec une variable utilisateur MySQL en combinaison avec PREPARE / EXECUTE ..
SET @count = (SELECT COUNT(*)/2 FROM aadhar); PREPARE q FROM 'SELECT * FROM aadhar LIMIT ?'; EXECUTE q USING @count; DEALLOCATE PREPARE q;
Ou ( option la plus sûre )
SET @count = (SELECT COUNT(*)/2 FROM aadhar);
SET @sql = CONCAT('SELECT * FROM aadhar LIMIT ', @count);
PREPARE q FROM @sql;
EXECUTE q;
DEALLOCATE PREPARE q;
Avertissement supplémentaire
Veuillez noter que SQL est par définition sans ordre . Utiliser LIMIT sans ORDER BY n'a aucun sens . SQL est libre de renvoyer les enregistrements ce qui correspond dans l'ordre d'année qu'il souhaite sans ORDER BY , ce qui signifie que l'exécution de la même requête deux fois peut entraîner un résultat différent.
Il est également préférable d'utiliser CEIL () ou CAST () qui convertit un double en un int afin que les méthodes ne se trompent pas lorsque la table a un nombre impair hors enregistrements et génère du SQL avec un double comme celui-ci SELECT * FROM aadhar LIMIT 1.500000000
voir démo sur la façon de les faire
Essayez ceci:
select * from aadhar limit ((select count(*) from aadhar)/2);
La clause count renvoie le nombre d'enregistrements, et la moitié de cette valeur est prise en limite.
Vous pouvez y parvenir en utilisant des variables.
SELECT @s:=@s+1 id,a.*
FROM aadhar a,
(SELECT @s:= 0) AS s where @s < (SELECT count(*)/2 from aadhar a2)
Ici '@s' est une variable et en ajoutant un identifiant de création qui est auto-incrémenté. Où condition stocke la moitié de votre nombre total d'enregistrements et @s s'arrête juste après avoir atteint la limite de la moitié de votre enregistrement.
mettez à jour votre question et ajoutez le message d'erreur exact