2010-02-24 9 views
1

J'ai une table nommée "adresse", qui a:la récupération même colonne deux fois d'une table

  • id
  • titre
  • PARENT_ID

... champs.

Dans la colonne de titre, le nom des régions et des districts est inséré. Les régions ont la valeur parent_id de zéro, et parent_id des districts sont id des régions.

Je veux une requête qui affiche les régions dans une colonne et ses districts respectifs dans une autre colonne.

+0

Ne serait-il pas préférable d'avoir une table Region et une table District? –

+0

Votre question n'est vraiment pas claire. Le titre contient-il à la fois la région et le district? Comment? – amarillion

+0

@amarillion - Je pense que GJ signifie qu'il a une table qui stocke les régions et les districts. Les régions auront toujours un parent_id de 0; Le parent_id du district sera l'identifiant de la région à laquelle il appartient. Le champ de titre stockera le nom de la région ou du district, en fonction du «type» de la ligne. –

Répondre

0

Utilisez quelque chose comme ce qui suit:

Select r.Region, s.State 
from 
    (Select id, title as Region from address where parent_id=0) as r, 
    (Select id, title as State, parent_id from address where parent_id>0) as s 
where s.parent_id = r.id 

Son ANSI SQL. Vous pouvez continuer à l'accorder pour votre besoin.

+0

ANSI-89 pour être spécifique. ANSI-92, comme vous le voyez dans la réponse de Graham, est préférable. –

5

Vous pouvez joindre la table sur elle-même comme ceci:

SELECT 
    R.Title AS Region, 
    D.Title AS District 
FROM 
    address R 
INNER JOIN 
    address D 
    ON 
    D.parent_id = R.id 
    AND 
    D.parent_id > 0 
WHERE 
    R.parent_id = 0 

Cependant la structure de votre table est un peu bizarre, je ferais un peu de lecture sur la normalisation de la base de données.

Questions connexes