Détails: P>
je veux à cause de 3., en utilisant une jointure intérieure à schéma: p> requête (1): p> v code> et c code> sont des tables p> li>
c code> pour rejoindre v code> sur 2 conditions (deux C sont nommés C0 code> et C1 code >). Puisque je dois filtrer v code> par colonnes de C code> et C code> S séparément dans la même requête, je pense que la jonction est nécessaire. p> li>
v code> a beaucoup, au moins un C code>, et que cx code> n'existe parfois pas. p> < / li>
ol> C0 code> et C1 code> provoque parfois un résultat vide, mais je ne veux pas obtenir v < / Code> La zone blanche de ' p> où c0.name = "mot" ou c1.name = "mot" code>: cette clause existe tous les temps. p> où cx.name comme '% wo%' code>: cette clause dépend de l'heure. p> p>
4 Réponses :
Eh bien ... vous semblez rechercher un Ceci renvoie tous les enregistrements dans le tableau Dans cette situation, l'avantage de la sous-requête corrélée à l'approche code> code> est qu'elle évite de multiplier des enregistrements lorsque plusieurs matchs existent dans le tableau Si vous souhaitez exclure les enregistrements qui répondent à des conditions, mais simplement modifier Existe code> condition avec la sous-requête corrélée: v < / Code> Pour lequel au moins un enregistrement existe dans le tableau C code> qui satisfait à la condition c.c0 = v.c0 code> ou condition c.c1 = v.c1 code>. p> C code>. p> où il existe code> sur où il n'existe pas code> >. p> p>
Un bon point sur existe pour éviter les doublons, mais leur interrogation ambiguïté très mal pour obtenir de l'aide.
! convenir certains de la référence de liaison à MCVE. La plupart des gens fournissent des informations de descente et n'ont pas besoin de la surcharge gonflée sur chaque question. Parfois, les gens jettent cela comme un commentaire si souvent son un peu effrayant, surtout les débutants qui ne peuvent même pas décrire ce qu'ils ne comprennent pas. J'ai répondu à beaucoup d'autres que cela n'a jamais eu le niveau de détail Mvce demande, mais cela prend également la lecture de la question et vous avez été en mesure d'offrir une solution réalisable sans cela :)
@Drapp: Oui, je suis d'accord avec vous que le répondeur doit également faire un effort réel pour comprendre la question, même lorsqu'il ne répond pas aux exigences rigoureuses en quelque sorte sur la balise SQL. J'ai également répondu à beaucoup de telles questions, souvent avec succès. Je suppose que c'est toujours une question d'évaluation à quel point vous êtes sûr que vous comprenez correctement ce qui est demandé à VS demandant des éclaircissements de l'OP.
mauvaise demande / détails de la question, sachant un meilleur contexte de ce que vous voulez, même si des champs abrégés et des tables réelles pourraient aider à améliorer à l'avenir. Cependant, cela ressemble à ce que vous voulez est une condition "dans" basée sur l'une des conditions aliasées "C". Sans les voir, vous pouvez le regarder comme ceci (ou simplifié les deux critères en seconde).
select
v.*
from
VTable v
LEFT JOIN CTable C0
on ( ( v.SomeField = C0.SomeField )
OR ( v.SomeOtherField = C0.SomeOtherField ) )
where
c0.SomeField IS NOT NULL
Vous n'avez pas besoin de rejoindre la table C deux fois, vous pouvez écrire votre requête comme suit.
Si vous voulez juste des colonnes à partir de Je ferais former cela comme: p> V code>, alors existe code> se vient à l'esprit. select v.*
from v
where v.id in (select c.v_id
from c
where c.type in (0, 1)
);
Ce n'est pas la bonne façon de poser des questions SQL sur le débordement de la pile. Souhaitez-vous s'il vous plaît jeter un oeil sur Ce lien et essayer d'améliorer la qualité de votre question afin qu'il réponde afin que les normes?
Les choses seront plus claires si vous postez le schéma de table V et C
Je suis désolé pour ma mauvaise explication. Je n'ai pas compris ce que je veux faire. Grâce à vos réponses, j'ai pu comprendre cela.