2009-03-07 6 views
0

J'ai une relation d'héritage dans ma base de données, où j'ai une table parent (Table A) qui est essentiellement une séquence d'entiers auto-incrémentés (colonne Id) . De là, j'ai plusieurs tables (Tableau B, C & D) qui ont aussi une colonne Id, qui est une clé étrangère à la colonne Id dans le tableau A.Comment interroger la table concrète lorsque seul l'ID parent est connu

Maintenant, ma question est, si j'ai l'Id, Quel est le moyen le plus efficace pour obtenir la bonne rangée de la table B, C ou D?

EDIT: Il n'y aura qu'une seule ligne avec l'Id dans la table B, C ou D (il n'y aura pas de ligne correspondante dans l'autre 2).

+0

Puis-je vous demander pourquoi vous stockez des données dans des tables aléatoires? Vous ne pouvez pas avoir d'intégrité référentielle dans ce modèle. – cdonner

+0

Par le commentaire de cdonner, vous pouvez obtenir une meilleure réponse si vous reformulez votre question ... soit vous avez un modèle de données impair ou ce n'est pas clair ce que vous cherchez à faire. –

+0

Merci pour l'édition ... dans ce cas l'exemple UNION que j'ai fourni fonctionnerait si vous cherchez simplement à déterminer dans quelle table la ligne existe. –

Répondre

1

Vous pouvez utiliser des requêtes syndicales ... à savoir:

select 'TABLE B', a_id from b where a_id = 1 
UNION 
select 'TABLE C', a_id from c where a_id = 1 
UNION 
select 'TABLE D', a_id from d where a_id = 1; 

Cela vous donne une liste des tables avec une a_id de 1, tout en montrant la table, il résidait dans

Si tous. 3 tables ont la même structure, vous pouvez faire quelque chose de similaire:

select b.* from b where a_id = 1 
UNION 
select c.* from c where a_id = 1 
UNION 
select d.* from d where a_id = 1; 
Questions connexes