SQL - JOINTURE ENTRE vs, OÙ ENTRE

Il y A quelques semaines j'ai fait une requête (ne me souviens pas quoi) et il s'agissait de l' BETWEEN de l'opérateur. Au début, j'ai utilisé ce dans le WHERE, mais cette clause ne produira pas le résultat correct set (encore une fois, je ne me souviens pas quel était le problème). J'ai pensé pourquoi et pour arriver à la conclusion que j'avais pour le déplacer vers la JOIN clause.

par exemple

"Original" de la requête:

SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
WHERE b.field2 BETWEEN a.field2 AND a.field3 /*some other conditions*/

Révisé requête:

SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field 
                       AND b.field2 BETWEEN a.field2 AND a.field3
WHERE /*some other conditions*/

La JOIN version retournée un petit jeu de résultats par rapport à la WHERE version, et la JOIN version produit le bon résultat d'ensemble alors que WHERE l'on n'a pas.

La raison pour laquelle je vais poser maintenant est parce qu'à l'époque, je pensais à rien de lui, mais aujourd'hui, mon patron m'a demandé pourquoi je l'ai fait (pour un tout autre requête) et je lui ai dit que l'expérience que j'ai eu la dernière fois que j'ai fait, et lui et moi sommes tout à fait intrigué sur les différences entre les deux usages.

De ce que je pense pourquoi l'on produit quelque chose de différent de l'autre, c'est que le WHERE clause uniquement sur la version sélectionné une gamme de données, alors que le JOIN version regardé pour un large éventail de données pour rejoindre sur. Est-ce le cas? Ou je l'ai fait venir à travers une expérience unique touchés par le reste de la requête (la requête a été beaucoup plus compliqué que les exemples).

MODIFIER
Je suis en désaccord avec la double possible car ma on s'intéresse spécifiquement à la BETWEEN clause, pas de jointures en général. J'ai lu le mentionné avant, et il n'a pas répondu à ma question, c'est pourquoi j'ai posté cette.

  • Je suis en désaccord; regardez modifier.
  • Spectacle plein de requête(s). Je suppose que vous avez un problème avec les parenthèses.
  • si vous pensez que l'erreur est provoquée par la syntaxe, s'il vous plaît regardez les données renvoyées par les deux requêtes et créer un sous-ensemble simplifié de données que vous pouvez exécuter ces factice des requêtes. si les deux requêtes renvoient des résultats corrects, l'erreur est à l'extérieur de cette syntaxe. sinon, afficher les données de l'échantillon de sorte que nous pouvons recréer et à diagnostiquer.
  • Je ne peux que la requête était juste une de celle qui a été saccagé après utilisation. Comme je l'ai dit, je ne me souviens pas de ce qu'il était pour.
  • que l'on est plus proche de ma question, mais il sera intéressant de voir si quelqu'un peut préciser encore davantage à propos de ma question, mais c'est similaire à ce que je pensais.
  • OÙ/SUR diffèrent pour les Jointures EXTERNES. Mais vous n'avez qu'INTÉRIEURE. Donc, il n'est pas question que des clauses de sous et qui sont, en vertu de la OÙ. Votre problème doit être dû à une autre condition.
  • Copain; cet exemple est pour Left Join. Il est demandé à la inner join.
  • J'ai lu le post CoderofCode mentionnés et il a dit ce que vous avez dit, mais il a dit que les deux sont sémantiquement différente, de sorte que la question est pourquoi une jointure externe produire un ensemble de résultats différent.
  • Désolé, le post était de couvrir tous les types de jointures, j'ai juste pris INNER JOIN comme un exemple, c'est pourquoi le titre dit tout simplement "rejoindre".
  • Copain; Rien de mal à partir de votre côté. Pas besoin de dire désolé. where clause and on clause are different for outer joins but linguistically behave as same for inner join. et votre post est différent de celui de la poste. Je voulais simplement dire que votre post est tout simplement pas un doublon de " ce " post
  • Mais Buddy; Si vous avez utilisé outer joins en vous original requêtes et comme vous le dites: the post was to cover all types of joins, I just picked INNER JOIN as an example, that's why the title just says 'join' Puis, il a certainement des questions. Le ci-dessus requêtes peuvent apporter des résultats différents pour les jointures externes
  • Yep, j'ai modifié il implique n'importe quel type de jointure.
  • Aviez-vous utilisé jointure interne lui-même? ou jointure Externe?
  • Je me souviens vaguement qu'il soit externe gauche
  • Laissez-nous continuer cette discussion dans le chat.
  • Vous avez sûrement passer par les liens donnés par CoderofCode 🙂
  • double possible de INNER JOIN SUR vs clause where
  • Nan bro. Ce n'est pas un doublon de cette. Le lien ci-dessus a déjà été posté et retiré de commentaires 🙂

InformationsquelleAutor RoyalSwish | 2015-03-12