2011-05-15 2 views
3

J'ai cinq tableaux "ArtBook, Eng, comm, Loi, mgt" et chaque tableau a une même colonne et je veux rechercher toutes les informations ce livre particulier par son id par exempleSql requête pour la procédure stockée

select * from ArtBook,Eng,Comm,Law,mgt where @BookId=ArtBooks.BookId 
or @BookId=CommBooks.BookId 
or @BookId=Eng.BookId 
or @BookId=Law.BookId 
or @BookId=mgt.BookId 
+3

Vous auriez besoin d'un 'UNION ALL' plutôt que d'un 'JOIN' mais cela ne me semble pas être la bonne structure. Pourquoi ne pas une table pour les livres avec une colonne pour le genre ou une table de jonction séparée si vous souhaitez autoriser les livres qui couvrent plusieurs genres. –

Répondre

0

On pourrait utiliser l'opérateur UNION ou UNION ALL.

(SELECT * FROM ArtBook) 
UNION ALL 
(SELECT * FROM Eng) 
... 
WHERE @BookId=ArtBooks.BookId or 
     @BookId=CommBooks.BookId or 
     @BookId=Eng.BookId or 
     @BookId=Law.BookId or 
     @BookId=mgt.BookId 

et cetera, et cetera. Bien que vous pouvez envisager de restructurer la façon dont vos données sont stockées pour faciliter ce genre de chose.

+0

La clause 'WHERE' n'a besoin que d'une condition dans chaque partie de 'UNION ALL'. 5. –

+0

Ouais, ce serait une meilleure forme, en changeant la réponse pour refléter cela. – zellio

3

Si toutes les tables stockent des livres de catégories différentes, regroupez-les dans une table et ajoutez une colonne "catégorie". Catégoriser dans des tableaux séparés comme celui-ci n'est pas une bonne idée pour les raisons que vous avez démontrées.

1
select * 
from ArtBook 
where BookId = @BookId 
union all 
select * 
from Eng 
where BookId = @BookId 
union all 
select * 
from Comm 
where BookId = @BookId 
union all 
select * 
from Law 
where BookId = @BookId 
union all 
select * 
from Mgt 
where BookId = @BookId 
+0

@Archi - avez-vous trouvé la réponse? –