IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Requête Sql avec requete imbriquée et LIMIT 5,10


Sujet :

WinDev

  1. #1
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut Requête Sql avec requete imbriquée et LIMIT 5,10
    Bonjour,
    Je souhaite mettre LIMIT 5,10 à la place de TOP mais WinDev ne reconnait pas le LIMIT
    Comment faire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SELECT 
    	FAM01.IDFAMILLE AS IDFAMILLE,	
    	FAM01.Nom AS Nom,	
    	PRODUIT.Désignation AS Désignation,	
    	PRODUIT.PUHT AS PUHT,	
    	PRODUIT.QtéStock AS QtéStock,	
    	PRODUIT.IDFAMILLE AS IDFAMILLE_PR
    FROM 
    	(  
    	SELECT  
    	//TOP 5 => ça fonctionne
    	FAM02.IDFAMILLE AS IDFAMILLE,	
    	FAM02.Nom AS Nom,	
    	FAM02.IDCATEGORIE AS IDCATEGORIE
    	FROM 
    	FAMILLE AS FAM02
            LIMIT 5,10 // ne marche pas !
    	) 
    AS FAM01
    LEFT OUTER JOIN 
    PRODUIT
    ON FAM01.IDFAMILLE = PRODUIT.IDFAMILLE

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Pourrait-on savoir pourquoi vous tenez absolument à utiliser une fonction non implémentée pour laquelle il existe une équivalence ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    Pourrait-on savoir pourquoi vous tenez absolument à utiliser une fonction non implémentée pour laquelle il existe une équivalence ?
    Bonjour,
    C'est quoi son équivalence ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Autant pour moi je n'avais pas vu la subtilité dans la clause LIMIT qui débute à 5....

    Allez pour me faire pardonner voici un lien vers un vieux post des années 2000 : http://www.tomshardware.fr/forum/id-...ql-server.html

    L'idée de la sous-requête avec un order by inversé peut être une piste !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  5. #5
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    Autant pour moi je n'avais pas vu la subtilité dans la clause LIMIT qui débute à 5....

    Allez pour me faire pardonner voici un lien vers un vieux post des années 2000 : http://www.tomshardware.fr/forum/id-...ql-server.html

    L'idée de la sous-requête avec un order by inversé peut être une piste !
    Bonjour,
    je vais essayer et je te tiens informé

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Je parle de ça :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ( SELECT TOP 5 * FROM ( SELECT TOP 10 * FROM ma_table ORDER BY 1 ) ORDER BY 1 DESC ) ORDER BY 1
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  7. #7
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    ça marche ! Merci !
    voici la version pour une base HyperFile, à adapter selon le besoin

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT 
    	FAM01.*,
    	PRODUIT.Désignation AS Désignation,	
    	PRODUIT.PUHT AS PUHT,	
    	PRODUIT.QtéStock AS QtéStock,	
    	PRODUIT.IDFAMILLE AS IDFAMILLE_PR
    FROM 
    	(  
    	SELECT  
    	BOTTOM 5
    	FAM02.IDFAMILLE AS IDFAMILLE,	
    	FAM02.Nom AS Nom,	
    	FAM02.IDCATEGORIE AS IDCATEGORIE
    	FROM 
    	( SELECT TOP 10 * FROM FAMILLE  ) AS FAM02
    	) 
    AS FAM01
    LEFT OUTER JOIN 
    PRODUIT
    ON FAM01.IDFAMILLE = PRODUIT.IDFAMILLE

  8. #8
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    une autre version plus simple dans une condition WHERE

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SELECT 
    	FAMILLE.IDFAMILLE AS IDFAMILLE,	
    	FAMILLE.Nom AS Nom,	
    	FAMILLE.IDCATEGORIE AS IDCATEGORIE, 
    	PRODUIT.Désignation AS Désignation,	
    	PRODUIT.PUHT AS PUHT,	
    	PRODUIT.QtéStock AS QtéStock,	
    	PRODUIT.IDFAMILLE AS IDFAMILLE_PR
    FROM 
    FAMILLE 
    LEFT OUTER JOIN  
    PRODUIT
    ON FAMILLE.IDFAMILLE = PRODUIT.IDFAMILLE  
    WHERE 
    	FAMILLE.IDFAMILLE IN ( 
    							SELECT 
    							BOTTOM 5 
    							IDFAMILLE 
    							FROM 
    							( 
    								SELECT 
    								TOP 2
    								* 
    								FROM 
    								FAMILLE 
    							) 
    						)

  9. #9
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    Après longue réflexion je me suis aperçu que le fait de mettre TOP et BOTTOM dans la sous-requête ne donne pas les valeurs attendu et
    ce n'est géré pareil dans tout les SGBD.
    La solution final que je garde est mettre dans la clause du WHERE deux TOP
    *Le premier TOP donne le nombre maximum d'enregistrements à retourner
    *Le deuxième c'est le décalage du premier enregistrement à retourner (à partir de <=> la position de départ) N.B c'est N+1

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    SELECT 
    	FONCTIONS.IdFonction AS IdFonction,	
    	FONCTIONS.Nom AS Nom,
    	FONCTIONS.Adresse AS Adresse ,
    	FONCTIONS.CodePostal AS CodePostal , 
    	FONCTIONS.Ville AS Ville , 
    	FONCTIONS.DebutFonction AS DebutFonction ,  
    	FONCTIONS.FinFonction AS FinFonction , 	
    	Collabo.IdFonction AS IdFonction_CB , 
    	Collabo.Nom AS Nom , 
    	Collabo.Prenom AS Prenom , 
    	Collabo.Matricule AS Matricule , 
    	Collabo.Adresse AS Adresse , 
    	Collabo.CodePostal AS CodePostal , 
    	Collabo.Ville AS Ville  
    FROM 
    FONCTIONS
    Left OUTER JOIN 
    Collabo
    ON FONCTIONS.IdFonction = Collabo.IdFonction 
    WHERE 
    FONCTIONS.IdFonction IN (
    						SELECT 
    						TOP 5  
    						IdFonction 
    						FROM 
    						FONCTIONS
    						WHERE 
    						FONCTIONS.IdFonction NOT IN 
    							(						
    								SELECT 
    								TOP 10  
    								IdFonction 
    								FROM 
    								FONCTIONS
    							)
    						)

    Le sujet est ré-ouvert si quelqu'un a des remarques pour la perfermance

Discussions similaires

  1. [WD17] Requete Sql avec requete imbriquée et TOP 2
    Par tunizar dans le forum WinDev
    Réponses: 12
    Dernier message: 23/06/2014, 15h33
  2. optimisation de requête sql avec select imbriquées
    Par yassine_le_boss dans le forum SQL
    Réponses: 6
    Dernier message: 02/11/2010, 22h12
  3. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo