Requete SQL sur sois même

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete SQL sur sois même

par loopkin » 18 juin 2006, 15:51

Cas hyper-classique : Il faut jouer (...) le même identifiant.
Nickel Henri, merci beaucoup

par Henri » 16 juin 2006, 16:34

Merci :oops:
15 ans de SQL derrière soi, même appris sur le tas, ça aide :)

par ouckileou » 16 juin 2006, 16:28

Ah oui bien vu =D>

par Henri » 16 juin 2006, 16:18

Cas hyper-classique : Il faut jouer avec les alias de tables pour pouvoir mettre deux fois la table ville dans la clause FROM. On appelera la table ville une fois v (pour ville) et une fois a (pour agglo) et on travaille comme si on avait deux tables distinctes v et a et une jointure entre ces deux "tables".
Ensuite, il faut également renommer les colonnes dans le select pour éviter d'avoir deux fois le même identifiant.

Code : Tout sélectionner

SELECT v.id_ville AS id_ville, v.nom AS nom_ville, a.id_ville AS id_agglo, a.nom AS nom_agglo FROM ville AS v, ville AS a WHERE v.code_agglo = a.id_ville

par loopkin » 16 juin 2006, 15:33

Merci pour ces pistes. Je vais vois si il y a moyen de passer en v4.1 ou v5 car ça semble dans ce cas nettement simplifier la vie.

Merci

par ouckileou » 16 juin 2006, 15:21

La remarque est pas idiote puisqu'on ne sait pas exactement quelle version est utilisée
ah ok désolé, ceci dit je verrai quand meme 2 requetes
1/ Récupérer le nom de l agglo :

Code : Tout sélectionner

SELECT nom FROM ville WHERE id=(SELECT code_agglo FROM ville WHERE id=$id)
Ceci dit je suis fatigué y a peut etre plus simple :)
Pour celle-ci oui en effet :

Code : Tout sélectionner

SELECT id_ville, nom_ville AS nom_agglo FROM villes WHERE code_agglo = id_ville AND id_ville = 1

par guilt92 » 16 juin 2006, 15:15

ah ok désolé, ceci dit je verrai quand meme 2 requetes


1/ Récupérer le nom de l agglo :

Code : Tout sélectionner

SELECT nom FROM ville WHERE id=(SELECT code_agglo FROM ville WHERE id=$id)
2/ Récupérer toutes les villes

Code : Tout sélectionner

SELECT nom FROM ville WHERE code_agglo=(SELECT code_agglo FROM ville WHERE id=$id)
Ceci dit je suis fatigué y a peut etre plus simple :)

par ouckileou » 16 juin 2006, 15:05

c'est 4.1 les sous requêtes

par guilt92 » 16 juin 2006, 14:53

tu dois absolument faire cela en 1 seule requete ? parce que en plus en MySQL 4 on ne peut pas faire de requetes imbriquées il me semble.

par loopkin » 16 juin 2006, 14:48

Après pour récupérer à chaque fois le nom de l'algo faudrait compliquer la chose mais est-ce réellement utile ?
Malheureusement oui, c'est utile, car là j'ai simplifié au maximum, d'autres colonnes sont a traitées.

Merci quand même.

par loopkin » 16 juin 2006, 14:46

Essaye d etre un peu plus précis stp en tout cas moi j ai pas compris :(
j'ai une seule table qui contient le code de chaque ville. Une ville peut appartenir a une agglomération, dans ce cas cette ville a un code agglo qui représente le code ville de la ville principale de l'agglomération.

id_ville, nom, code_agglo
1 villeA 3
2 villeB 3
3 villeC 3
4 villeD 6

L'affichage que je souhaite connaissant l'id_ville=2 est :
nom ville, nom agglo
villeA villeC
villeB villeC
villeC villeC

est ce que j'ai été plus claire ?

Merci

par ouckileou » 16 juin 2006, 14:40

Ben ça a l'air simple :

Code : Tout sélectionner

SELECT id_ville, nom FROM villes WHERE code_agglo = <code>
Après pour récupérer à chaque fois le nom de l'algo faudrait compliquer la chose mais est-ce réellement utile ?

Un petit test à la sortie pour voir à quelle ligne id_ville = code_agglo et tu l'auras

par guilt92 » 16 juin 2006, 14:34

code_agglo est égal à id_ville de l'agglo a laquelle appartient une ville.
:shock: :shock:

Désolé je comprend pas. Tu as une table agglo qui associe le nom de l agglomeration a son code_agglo ? Essaye d etre un peu plus précis stp en tout cas moi j ai pas compris :(

Requete SQL sur sois même

par loopkin » 16 juin 2006, 14:23

Bonjour,

une requete que ej n'arrives aps a mettre en place :

une table ville
champs : id_ville, nom, code_agglo

code_agglo est égal à id_ville de l'agglo a laquelle appartient une ville.

Le but est d'obtenir, connaissant l'id_ville d'une ville la liste de toutes les villes appartenant a la même agglo.

Le résultat devrias avoir l'aspect suivant :
nom(ville), nom(agglo)

(bien sur nom agglo est le même sur chaque ligne vue la requete).

Je suis en MySQL 4.

Quelqu'un a une piste ?

Merci