2010-08-14 2 views
0

Disons que j'ai 3 requêtes. La requête 1 renvoie une information dont la requête 2 et la requête 3 ont besoin. Existe-t-il un moyen pour Query 2 et Query 3 d'accéder à cette information à partir du résultat de la requête 1?Les requêtes suivantes dépendent du résultat de la requête initiale: comment?

En ce moment, j'ai Query 1 en cours d'exécution deux fois: une fois dans la requête 2 et une fois dans la requête 3. Cela ne me semble pas efficace.

Existe-t-il un meilleur moyen pour MySQL?

EDIT 1:

Par exemple, supposons que la requête 1 renvoie ceci:

Id 
    ==== 
    1 
    3 
    7 

Maintenant, Query 2 et Query 3 besoin de 1, 3, 7 dans leur INDIVIDUELS clauses WHERE.

+0

Et une même question plus intéressante: comment assurez-vous maintenant que le * second * exécution renvoie les * mêmes lignes * que le premier? –

+0

Err ... N'est-ce pas juste une jointure? Pouvez-vous donner plus de contexte? – mlathe

+0

@Remus: Je suppose qu'il est possible que les résultats de la première et deuxième exécution soient différents. C'est définitivement une autre préoccupation. – StackOverflowNewbie

Répondre

0

Vous pouvez éliminer la possibilité de modification du jeu de résultats à l'aide d'une transaction sérialisable. La plupart des bases de données les supportent; MySQL le fait si vous utilisez le moteur de stockage InnoDB. Avant d'émettre la première requête, exécutez une commande

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 

. Lorsque vous avez terminé toutes les déclarations, ROLLBACK;.

Voir ici pour plus de détails ... http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html

0

En supposant:

query1: select id from foo; 
query2: select * from bar where id = #value#; 

Vous pourriez simplement écrire query2 comme ceci:

select * from bar where id in (select id from foo); 

Vous pourriez avoir un problème si des éléments sont ajoutés à foo entre vous d'exécuter les deux requêtes.

+0

C'est la manière dont l'OP exécute déjà les requêtes. –

Questions connexes