Problème avec une requête sql

Bonjour,

J'aimerai faire une requête SQL qui me permet de récupérer des données dans deux tables différentes.
Jusque la c'est compréhensible :D

Voila mes deux tables:

UGRB

LAT | LON |ECH |UGRB
45.0 | 0.0 | 3 | 0.9
45.5 | 0.0 | 3 | 0.5
45.0 | 0.5 | 3 | 1.2
45.5 | 0.5 | 3 | 3.4
45.0 | 0.0 | 6 | 0.9
45.5 | 0.0 | 6 | 0.5
45.0 | 0.5 | 6 | 1.2
45.5 | 0.5 | 6 | 3.4

et VGRB
LAT | LON |ECH |VGRB
45.0 | 0.0 | 3 | -0.2
45.5 | 0.0 | 3 | -4.9
45.0 | 0.5 | 3 | 0.0
45.5 | 0.5 | 3 | 0.1
45.0 | 0.0 | 6 | -0.2
45.5 | 0.0 | 6 | -4.9
45.0 | 0.5 | 6 | 0.0
45.5 | 0.5 | 6 | 0.1

Voici donc un vulgaire exemple de la configuration de ces deux tables car en réalités, elles contiennent 19 200 lignes chacune :)

Donc voici ma question,

Comment créer une table nommée vent et qui ressemblerai a ceci:
LAT | LON |ECH |UGRB |VGRB
45.0 | 0.0 | 3 | 0.9 | -0.2
45.5 | 0.0 | 3 | 0.5 | -4.9
45.0 | 0.5 | 3 | 1.2 | 0.0
45.5 | 0.5 | 3 | 3.4 | 0.1
45.0 | 0.0 | 6 | 0.9 | -0.2
45.5 | 0.0 | 6 | 0.5 | -4.9
45.0 | 0.5 | 6 | 1.2 | 0.0
45.5 | 0.5 | 6 | 3.4 | 0.1

Bon j'ai dejà une petite idée:

J'exécute ces deux requêtes:

$sql1=CREATE TABLE vent AS SELECT * FROM UGRB ; // je copie la table UGRB dans vent
$sql2="ALTER TABLE vent ADD VGRB text"; //je fabrique une nouvelle colonne dans vent: VGRB

Mais après comment faire pour insérer les données de la colonne de VGRB de la table VGRB dans vent ???

Merci d'avance
Cordialement

6 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Jointure entre deux tables, UGRB et VGRB, est visée pour créer une table vent comportant LAT, LON, ECH, UGRB et VGRB sur la même ligne pour chaque triplet commun. Plusieurs réponses préconisent une jointure sur LAT, LON et ECH, puis CREATE TABLE vent AS SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB FROM UGRB a JOIN VGRB b ON a.LAT=b.LAT AND a.LON=b.LON AND a.ECH=b.ECH. D'autres évoquent des difficultés pratiques, notamment des erreurs MySQL ou des types de champ et recommandent de tester directement dans phpMyAdmin. Enfin, les échanges indiquent que la requête est correcte mais que vent peut rester vide si les données ne concordent pas ou si la jointure n’est pas exécutée correctement.

Bobot (l’IA à votre service)
  1. Modérateur
    Salut,

    Cela devrait être du genre (en Oracle) :

    create table VENT as select a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
    from UGRB a , VGRB b
    where a.LAT = b.LAT
    and a.LON = b.LON
    and a.ECH = b.ECH

    cdlt

    1. slt

      Merci pour ta réponse mais j'ai encore un problème:

      J'execute ce fichier php:

      <?php
      try
      {
      	$bdd = new PDO('mysql:host=host ;dbname=dbname', 'user', 'mot de passe');
      }
      catch (Exception $e)
      {
              die('Erreur1 : ' . $e->getMessage());
      }
      
      $sql0="create table VENT as select a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB 
      from UGRB a , VGRB b 
      where a.LAT = b.LAT 
      and a.LON = b.LON 
      and a.ECH = b.ECH ";
      $bdd->query($sql0) or die ('Erreur2 : '.mysql_error());
      
      ?>
      


      Mais il s'affiche ceci à la fin : "Erreur 2:"

      Je test donc la requête sur phpyadmin

      Et il s'affiche:

      "#1317 - Query execution was interrupted"

      Je pense me tromper sur "$bdd->query($sql0)" , j'ai aussi tester $bdd->exec($sql0)
      Mais ca ne marche pas.
      1. Modérateur
        Désolé, je n'ai aucune expérience du sql sous php.
      2. Pas grave, merci quand même :)
    2. Tu peux faire:

      CREATE TABLE vent SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
      FROM UGRB a , VGRB b
      WHERE a.LAT = b.LAT
      AND a.LON = b.LON
      AND a.ECH = b.ECH ";

      En fait c'est ce qu'a écrit jee pee mais sans le "AS"
      1. Non, ça ne marche toujours pas :'(
        Merci quand même :)
      2. Tu as la même erreur: #1317 - Query execution was interrupted" ?

        Essaye ça:

        CREATE TABLE vent SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
        FROM UGRB a JOIN VGRB b
        ON a.LAT = b.LAT
        AND a.LON = b.LON
        AND a.ECH = b.ECH

        essaye la requête directement dans ta base de données si ça ne marche pas. Normalement la requête est bonne.
      3. Merci mais toujours la même erreur XD

        "#1317 - Query execution was interrupted"
      4. Il en est de même pour cette requête:

        "CREATE TABLE vent SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
        FROM UGRB a JOIN VGRB b "
      5. Hum et si tu fais un SELECT * FROM UGRB ça marche au moins?
    3. a mon avis il ne faut pas faire CREATE TABLE comme ça

      on fait la creation de la table une seule fois
      - soit directement par phpmyadmin

      - soit au début du script php

      CREATE TABLE vent ........... avec tous les noms de champs leur type, leur taille etc..
      voir sur le site mysql pour plus de détails

      et ensuite dans la script php il faut faire une requette
      SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
      FROM UGRB a , VGRB b
      WHERE a.LAT = b.LAT
      AND a.LON = b.LON
      AND a.ECH = b.ECH "
      et une boucle while sur le résultat qui fait un ISERT INTO vent ..... à chaque passage
      1. Si le create table marche comme cela, il y a un exemple dans la doc:
        http://dev.mysql.com/doc/refman/5.0/fr/create-table.html

        et j'ai essayé sur une de mes bases en local, il n'y a aucun soucis.
        1. Merci mais la requête :

          SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
          FROM UGRB a , VGRB b
          WHERE a.LAT = b.LAT
          AND a.LON = b.LON
          AND a.ECH = b.ECH

          ne fonctionne pas :(

          Toujours la même erreur ><
          1. oui donc il ne veut pas faire la jointure...

            Bon, on va y aller doucement:
            SELECT a.LAT
            FROM UGRB a JOIN VGRB b
            ON 'a.LON' = 'b.LON'
          2. Oui la ca marche mais il n'y aucun résultat :)
          3. Ouais non ca marche pas, aucun résultats :(
          4. Donc je fais:

            CREATE TABLE vent SELECT a.LAT, a.LON, a.ECH, a.UGRB, b.VGRB
            FROM UGRB a JOIN VGRB b
            ON 'a.LAT' = 'b.LAT'
            AND 'a.LON' = 'b.LON'
            AND 'a.ECH' = 'b.ECH'

            :)
          5. La requête marche mais la table vent est vide :(