Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/12/2010, 10h18   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
Par défaut Requête copie de colonnes avec sélection de lignes

Bonjour,

je désire copier quelques colonnes d’une table dans une autre table uniquement pour les lignes où elles ont l’identifiant en commun
Les colonnes bassin et alt dans la table roe_general sont vides pour l’instant. Ce sont celles-là que j’aimerais compléter à partir des mêmes colonnes de la table roe_selec.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
CREATE TABLE public.roe_general
(
  id_roe character varying(25),
  nom character varying(254),
  bassin character varying(25),
  alt integer,
  CONSTRAINT "roe_general_pkey" PRIMARY KEY (id_roe)
)
 
CREATE TABLE public.roe_selec
(
  id_roe character varying(25),
  bassin character varying(25),
  alt integer,
  CONSTRAINT "roe_selec_pkey" PRIMARY KEY (id_roe)
)
J’arrrive à sélectionner une colonne avec uniquement les lignes que je veux de la table roe_selec mais je n’arrive pas à l’insérer dans la table roe_general au niveau des lignes spécifiques avec le même identifiant id_roe

Code :
1
2
3
 
SELECT roe_selec.bassin FROM public.roe_selec, public.roe_general
WHERE roe_selec.id_roe  = roe_general.id_roe;
Ma question est donc quelle commande permet cela (update, copy, select into??) ?
Merci de votre aide
Gaetgaet78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 10h24   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Code :
1
2
3
4
UPDATE public.roe_general rg (bassin, alt)
SELECT rs.bassin, rs.alt
FROM public.roe_selec rs
WHERE rs.id_roe = rg.id_roe
A tester d'abord quand même !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 10h41   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Cinephil je dirais qu'il manque SET et un =

Tu peux faire un update de jointure mais je ne suis plus très sûr de la syntaxe :
Code :
1
2
3
4
UPDATE TABLE roe_general g
JOIN roe_selec s ON g.id_roe  = s.id_roe
SET g.bassin = s.bassin
	,g.alt = s.alt
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 14h09   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Au temps pour moi ! J'ai mélangé avec un INSERT SELECT !

Trop préoccupé par autre chose !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 14h58   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
T'es passé du côté obscur ?
Sinon ça donne quoi hibernate, ça n'a pas l'air facile en tout cas !
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 15h01   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par skuatamad Voir le message
T'es passé du côté obscur ?
Sinon ça donne quoi hibernate, ça n'a pas l'air facile en tout cas !
C'est la galère !

ORM = On Rame un Max !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 15h05   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par CinePhil Voir le message
ORM = On Rame un Max !
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 16h05   #8
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

quel est votre SGBDR ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 11h51   #9
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
Merci pour les réponses

Je n'arrive pas à faire la requête avec JOIN L'Aide dans Postgres (car je suis sous Postgres) l'utilise mais avec un SELECT

Autrement j'ai essayé l'autre code
Code :
1
2
3
4
UPDATE public.roe_general rg (bassin, alt)
SET rg.bassin = rs.bassin AND rg.alt = rs.alt
FROM public.roe_selec rs
WHERE rg.id_roe = rs.id_roe;
et celui-là
Code :
1
2
3
UPDATE public.roe_general SET (bassin, alt) =
    (SELECT roe_selec.bassin, roe_selec.alt FROM public.roe_selec, public.roe_general
WHERE roe_selec.id_roe  = roe_general.id_roe);
mais il m'indique que la syntaxe est incorrect..
Gaetgaet78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 12h05   #10
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
bonjour

que donne cette syntaxe ?

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
 
UPDATE public.roe_general 
SET bassin = (
    SELECT roe_selec.bassin 
    FROM public.roe_selec
    WHERE roe_selec.id_roe =  roe_general.id_roe
)
,alt =(
    SELECT roe_selec.alt 
    FROM public.roe_selec
    WHERE roe_selec.id_roe = roe_general.id_roe
)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h24   #11
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
Alors en fait cela me met ce message d'erreur :

Code :
1
2
3
4
5
6
ERREUR:  plus d'une ligne renvoyée par une sous-requête utilisée comme une expression
 
********** Erreur **********
 
ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression
État SQL :21000
Autrement j'ai essayé avec ce code:
Code :
1
2
3
4
UPDATE public.roe_general
INNER JOIN public.roe_selec ON roe_selec.id_roe =  roe_general.id_roe
SET roe_general.alt = roe_selec.alt
WHERE roe_general.alt IS NULL
mais il y aurait un problème de syntaxe sur l'INNER JOIN..

Code :
1
2
3
4
5
6
7
8
9
ERREUR:  erreur de syntaxe sur ou près de « INNER »
LINE 2: INNER JOIN public.roe_selec ON roe_selec.id_roe =  roe_general....
        ^
 
 
********** Erreur **********
 
ERREUR: erreur de syntaxe sur ou près de « INNER »
État SQL :42601
Gaetgaet78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h32   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
D'après la doc de Postgresql, il semble qu'il faille écrire ta requête comme ceci :
Code :
1
2
3
4
5
UPDATE public.roe_general
FROM public.roe_selec 
SET roe_general.alt = roe_selec.alt
WHERE roe_general.alt IS NULL
    AND roe_selec.id_roe = roe_general.id_roe
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h08   #13
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
Bonjour,

J'ai essayé donc avec ce code
Code :
1
2
3
4
5
UPDATE public.roe_general
SET roe_general.bassin = roe_selec.bassin
FROM public.roe_selec
WHERE roe_general.id_roe = (SELECT roe_selec.id_roe FROM public.roe_selec, public.roe_general
WHERE roe_selec.id_roe  = roe_general.id_roe);
mais la colonne ne serait pas reconnue..

Code :
1
2
3
4
5
6
7
8
ERREUR:  la colonne « roe_general » de la relation « roe_general » n'existe pas
LINE 2: SET roe_general.bassin = roe_selec.bassin
            ^
 
 
********** Erreur **********
 
ERREUR: la colonne « roe_general » de la relation « roe_general » n'existe pas
Je crois que je vais essayer de voir si il n'y a pas une solution plus simple (créer une troisème table et fusionner les deux suivant quelques critères?)
Gaetgaet78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h21   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Tu as essayé mon code ?
Et s'il prend le nom du schema pour un nom de colonne, supprime-le :
Code :
1
2
3
4
5
UPDATE public.roe_general
FROM public.roe_selec 
SET alt = roe_selec.alt
WHERE roe_general.alt IS NULL
    AND roe_selec.id_roe = roe_general.id_roe
Et bizarrement, dans ta précédente requête, tu voulais modifier alt et maintenant c'est bassin ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h25.


 
 
 
 
Partenaires

Hébergement Web