2014-04-26 1 views
0

J'ai une vue qui représente les relations entre les éditeurs et la littérature (livres, magazines, etc.).Meilleure façon d'aller chercher le parent par quelques entrées

Je suis en train de chercher id éditeur qui publie un livre X et Y. Publication
Ainsi, par exemple pour trouver l'éditeur/s qui publie Book#Clarissa et Publication#On the Nature of Things - le résultat est PUBLISHER_ID 1,5 (mais pas 4).

je le ferai par jointure interne la même vue:

select * 
from relations publication 
inner join relations books on publication.publisher_id = books.publisher_id 
where books.publication_type='Book' 
    and books.extended_field_3='Clarissa' 
    and publication.publication_type='Publication' 
    and publication.extended_field_4='On the Nature of Things' 

Les choses se compliquent quand je dois chercher par livre, Publication, Magazine (3 sur les jointures internes une vue complexe).

Y a-t-il un meilleur moyen? (Spécifique Oracle peut également aider)

drop table relations; 

CREATE TABLE relations 
(
    publisher_id int, 
    publication_id varchar(255), 
    publication_type varchar(255), 
    extended_field_1 varchar(255), 
    extended_field_2 varchar(255), 
    extended_field_3 varchar(255), 
    extended_field_4 varchar(255) 
); 

insert into relations values(1,A,'Book','','','Clarissa',''); 
insert into relations values(1,B,'Publication','','','','On the Nature of Things'); 
insert into relations values(1,C,'Book','','','Frankenstein',''); 
insert into relations values(3,D,'Book','','','',''); 
insert into relations values(3,E,'Publication','','','','A Paradoxical Ode'); 
insert into relations values(4,F,'Magazine','Time','','',''); 
insert into relations values(4,G,'Book','','','Clarissa',''); 
insert into relations values(4,H,'Publication','','','','Human Chemistry'); 
insert into relations values(4,I,'Book','','','The Woman in White',''); 
insert into relations values(5,K,'Book','','','Clarissa',''); 
insert into relations values(5,L,'Publication','','','','On the Nature of Things'); 
+0

Utilisez-vous Oracle ou SQL Server? La syntaxe suggère SQL Server. –

+0

Oracle, la syntaxe est juste pour l'exemple Merci. – user648026

Répondre

0

Je ne voudrais pas avoir un modèle qui utilise extended_field_1-extended_field_4, mais votre requête semble bien.

Créez un index distinct pour chaque extended_field que vous utilisez comme condition pour améliorer les performances de votre recherche.

Questions connexes