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

Requêtes MySQL Discussion :

MySql8 ne supporte pas CTE?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    S.H
    S.H est déconnecté
    Membre très actif
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Par défaut MySql8 ne supporte pas CTE?
    salut

    J'ai installé MySQL8 mais il ne supporte pas CTE

    J'ai ce message.

    [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'cte1 AS

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Nous donner le message d'erreur, c'est bien.
    Nous donner la requête qui provoque l'erreur, ce serait mieux !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 104
    Par défaut
    Salut S.H.

    N'auriez-vous pas confondu MySql avec MariaDB ?
    Les CTE sont dans la version MySql 8.0 et non dans la version MariaDB 10.2.


    Citation Envoyé par S.H.
    check the manual that corresponds to your MariaDB server version for the right syntax to use near 'cte1 AS
    @+

  4. #4
    S.H
    S.H est déconnecté
    Membre très actif
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut S.H.

    N'auriez-vous pas confondu MySql avec MariaDB ?
    Les CTE sont dans la version MySql 8.0 et non dans la version MariaDB 10.2.
    @+
    salut Artemus24

    Où puis-je trouver le lien de MYSQL8?
    parce que je l'ai téléchargé de:
    https://dev.mysql.com/downloads/mysql/

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 104
    Par défaut
    Salut M.H.

    Vous ne vous êtes pas trompé, il s'agit bien de la version MySql 8.0.11.

    Par contre, je ne comprends pas votre question : "Où puis-je trouver le lien de MYSQL8?"

    @+

  6. #6
    S.H
    S.H est déconnecté
    Membre très actif
    Inscrit en
    Octobre 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 122
    Par défaut
    salut Artemus24

    quel est le lien just de mysql sans MariaDB

    mon broblem
    avec Navicat
    et 127.0.0.1
    Images attachées Images attachées    

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 104
    Par défaut
    Salut S.H.

    Voici un script batch où l'on déclenche un script sql.
    La variable d'environnement accède au répertoire bin, contenant l'exécutable "mysql".
    Il suffit de remplacer la variable PATH par votre chemin à vous.
    Par exemple : "set PATH=.;C:\Wamp\bin\mysql\mysql8.0.11\bin\;%PATH%".
    Code : 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
    @echo off
     
    setlocal enableDelayedExpansion
     
    chcp 1252 > nul
     
    set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH%
     
    SET FIC=%~nx0
    SET FIC=%FIC:bat=sql%
     
    mysql < %FIC%  --verbose  --force
     
    endlocal
    pause
    exit
    L'astuce est que le nom du script batch (test.bat) porte le même nom que le script sql (test.sql).

    Voici un exemple de script SQL où j'utilise un CTE :
    Code : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- =======
    -- Version
    -- =======
     
    SELECT version();
     
    -- ======================
    -- Base de Données `base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`;
     
    use `base`;
     
    -- ============
    -- Table `test`
    -- ============
     
    CREATE TABLE `test`
    ( `id`       INTEGER UNSIGNED  NOT NULL auto_increment PRIMARY KEY,
      `pseudo`   VARCHAR(255)      NOT NULL,
      `point`    INTEGER UNSIGNED  NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =====================
    -- Insertion dans `test`
    -- =====================
     
    INSERT INTO `test` (`pseudo`,`point`) VALUES
      ('un',15),('deux',35),('trois',12),('un',8),('trois',25),('deux',35),('trois',2);
     
    -- ================
    -- Vidage de `test`
    -- ================
     
    select * from `test`;
     
    -- ===========
    -- Requête N°1
    -- ===========
     
    with  cte1 as (select  pseudo,
                           sum(point) as point
                     from  test
                 group by  pseudo
              ),
          cte2 as (select  t1.pseudo,
                           t1.point,
                           count(t2.pseudo)+1 as rang
                     from  cte1 as t1
          left outer join  cte1 as t2
                       on  t2.point > t1.point
                 group by  pseudo
                 order by  point desc
              )
      select * from cte2;
     
    -- ===
    -- Fin
    -- ===
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    exit
    Et voici son exécution :
    Code : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    SELECT version()
    --------------
     
    +-----------+
    | version() |
    +-----------+
    | 8.0.11    |
    +-----------+
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`       INTEGER UNSIGNED  NOT NULL auto_increment PRIMARY KEY,
      `pseudo`   VARCHAR(255)      NOT NULL,
      `point`    INTEGER UNSIGNED  NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`pseudo`,`point`) VALUES
      ('un',15),('deux',35),('trois',12),('un',8),('trois',25),('deux',35),('trois',2)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+--------+-------+
    | id | pseudo | point |
    +----+--------+-------+
    |  1 | un     |    15 |
    |  2 | deux   |    35 |
    |  3 | trois  |    12 |
    |  4 | un     |     8 |
    |  5 | trois  |    25 |
    |  6 | deux   |    35 |
    |  7 | trois  |     2 |
    +----+--------+-------+
    --------------
    with  cte1 as (select  pseudo,
                           sum(point) as point
                     from  test
                 group by  pseudo
              ),
          cte2 as (select  t1.pseudo,
                           t1.point,
                           count(t2.pseudo)+1 as rang
                     from  cte1 as t1
          left outer join  cte1 as t2
                       on  t2.point > t1.point
                 group by  pseudo
                 order by  point desc
              )
      select * from cte2
    --------------
     
    +--------+-------+------+
    | pseudo | point | rang |
    +--------+-------+------+
    | deux   |    70 |    1 |
    | trois  |    39 |    2 |
    | un     |    23 |    3 |
    +--------+-------+------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Vous constatez que j'utilise bien la version mysql 8.0.11. Et le CTE est bien pris en compte.
    A titre indicatif, je vous communique l'en-tête produite à l'ouverture de la console.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Enter password: ****
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1007
    Server version: 8.0.11 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    Et comme vous, j'ai bien la version mysql 8.0.11 !

    Avez-vous une autre version MySql ou MariaDB sur votre ordinateur ?
    Si oui, soit vous la désinstaller, soit vous faites en sorte d'avoir un autre port que le port 3306.

    En principe, vous devez avoir le fichier "my.ini" dans le répertoire "C:\Wamp\bin\mysql\mysql8.0.11\".
    Et dans ce fichier, le port doit être à 3306.

    @+

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2007, 12h48
  2. Dossir Extras ne supporte pas les scripts?
    Par Donaldo dans le forum 4D
    Réponses: 2
    Dernier message: 21/03/2007, 18h25
  3. Réponses: 2
    Dernier message: 26/02/2007, 00h56
  4. [PDO] Ne supporte pas le LIMIT ?
    Par titoumimi dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 27/09/2006, 16h56
  5. [IDE][VS.NET 2003] IIS ne supporte pas le framework 1.1 ?
    Par Monstros Velu dans le forum Visual Studio
    Réponses: 2
    Dernier message: 27/03/2006, 16h31

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