2010-07-19 7 views
1

Avoir un bloc mental avec contourner cette requête.Mysql plusieurs à plusieurs requête

je les tableaux suivants:

review_list: a la plupart des données, mais dans ce cas, la seule chose importante est review_id, l'identifiant du dossier que je suis actuellement intéressé par (int) variant_list: modèle (varchar), activé (bool)
variant_review: modèle (varchar), id (int)

variant_review est plusieurs à plusieurs table liant le review_id dans review_list au modèle (s) en variant_l ist examen et contient (par exemple):

.. 
test1,22 
test2,22 
test4,22 
test1,23 
test2,23... etc 

variant_list est une liste de tous les modèles possibles et si elles sont activées et contient (par exemple):

test1,TRUE 
test2,TRUE 
test3,TRUE 
test4,TRUE 

ce que je suis après dans une base MySQL est une requête que lorsqu'il est administré une review_id (à savoir, 22) retourne un jeu de résultats qui liste chaque valeur variant_review.model, et si elle est présente pour la review_id donnée comme:

test1,1 
test2,1 
test3,0 
test4,1 

ou similaire, que je peux f armer à une page Web avec une liste de cases à cocher pour les types. Cela montre tous les modèles disponibles et si chacun était présent dans le tableau

+1

J'ai du mal à comprendre ce que vous recherchez. Ça ne fait pas mal d'être bavard. Quelque chose comme le schéma pour chaque table irait miles pour vous aider à trouver une solution. Et quelles sont les deux valeurs de votre ensemble de résultats souhaités sont ... – FlyingStreudel

+0

Il serait utile si vous énumérer les colonnes affichées dans vos données d'exemple et sortie de l'échantillon. – Thomas

+0

Désolé pour la question douteuse, l'a mis à jour pour fournir une question plus claire et des données d'exemple dans et hors – Woody

Répondre

2

Étant donné un peu plus d'informations sur les noms de colonnes:

Select variant_list.model 
    , Case When variant_review.model Is Not Null Then 1 Else 0 End As HasReview 
From variant_list 
    Left join variant_review 
     On variant_review.model = variant_list.model 
      And variant_review.review_id = 22 

Juste pour être complet, si c'est le cas que vous pouvez avoir plusieurs lignes de la table variant_review avec le même modèle et review_id, alors vous devez le faire différemment:

Select variant_list.model 
    , Case 
     When Exists (
        Select 1 
        From variant_review As VR 
        Where VR.model = variant_list.model 
         And VR.review_id = 22 
        ) Then 1 
     Else 0 
     End 
From variant_list 
+0

Merci pour cela, mais je pense que ma question était erronée. J'ai mis à jour la question pour clarifier ce que j'essayais de réaliser – Woody

+0

@Woody - J'ai révisé ma solution. Cela vous obtiendra toutes les valeurs de variant_list et s'il y a une valeur pour le review_id donné. Je suppose que la combinaison de model et review_id ne peut apparaître qu'une seule fois dans la table variant_review (c'est-à-dire que vous ne pouvez pas avoir deux lignes avec les mêmes valeurs pour model et review_id). – Thomas

+0

Le premier est bon, la combinaison ne devrait jamais pouvoir apparaître à nouveau. Merci beaucoup, m'a sauvé beaucoup de tracas! – Woody

Questions connexes