SQL – JOIN TRA vs DOVE TRA

Un paio di settimane fa ho fatto una query (non ricordo cosa) e ha coinvolto il BETWEEN operatore. In un primo momento, ho usato questo in WHERE clausola, ma non produce il risultato corretto set (di nuovo, non mi ricordo quale fosse il problema). Ho pensato al motivo per cui e alla fine ha concluso che ho dovuto spostare la JOIN clausola.

ad esempio

“Originale” query:

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*/

Rivisto query:

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*/

Il JOIN versione restituito un risultato più piccolo rispetto agli WHERE versione, e il JOIN versione prodotta il risultato corretto set mentre WHERE non.

Il motivo che mi chiedo è perché al momento ho pensato nulla di esso, ma oggi il mio capo mi chiese il motivo per cui l’ho fatto (per una completamente diversa query) e gli ho detto che l’esperienza che ho avuto l’ultima volta che l’ho fatto, e sia lui che io sono molto incuriosito per le differenze tra i due usi.

Da quello che penso perché si produceva qualcosa di diverso dagli altri è che il WHERE clausola versione solo selezionato una serie di dati, mentre il JOIN versione guardò per un intervallo di dati partecipare su. È questo il caso? O ho fatto venire attraverso un’esperienza unica interessati dal resto della query (query è stata molto più complicata di esempi).

MODIFICA
Io non sono d’accordo con l’eventuale duplicato, perché il mio esamina in modo specifico il BETWEEN clausola, non si unisce in generale. Ho letto il post citato prima e non rispondere alla mia domanda, quindi, perché ho postato questo.

  • Io non sono d’accordo, guarda a modifica.
  • Mostra tutto query(s). Credo che hai problemi con le parentesi.
  • se ritieni che l’errore è causato dalla sintassi, si prega di guardare i dati restituiti dalla query e creare un sottoinsieme semplificato di dati che è possibile eseguire questi fittizio query. se entrambe le query restituisce i risultati corretti, l’errore è al di fuori di questa sintassi. in caso contrario, inserire i dati di esempio in modo siamo in grado di ricreare e diagnosticare.
  • Io non posso, come la query è stata solo una tantum, che era stato cestinato dopo l’uso. Come ho detto, non mi ricordo che cosa fosse.
  • che uno è più vicino alla mia domanda, ma sarà interessante vedere se qualcuno può chiarire ulteriormente circa la mia domanda, ma è molto simile a quello che ho pensato.
  • DOVE/IN diversi OUTER Join. Ma tu hai solo INTERIORE. Quindi, non importa quali clausole sono sotto e che sono sotto DOVE. Il problema deve essere a causa di un’altra condizione.
  • Buddy; Che esempio è per Left Join. Chiede inner join.
  • Ho letto il post CoderofCode citata) e ha detto quello che hai detto, ma ha detto che entrambi sono semanticamente in modo diverso, quindi la domanda è: perché un outer join produrre un set di risultati diversi.
  • Scusate, il post era quello di coprire tutti i tipi di join, ho appena preso INNER JOIN come esempio, ecco perché il titolo dice solo “partecipa”.
  • Buddy; Nulla di sbagliato da parte vostra. Non c’è bisogno di dire mi dispiace. where clause and on clause are different for outer joins but linguistically behave as same for inner join. e il tuo post è diverso da quello post. Ho solo inteso il tuo post non è un duplicato di ‘che’ post
  • Ma Buddy; Se si sarebbe usato outer joins in originali query e come si dice: 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' Quindi certamente importante. Le richieste di cui sopra può portare a risultati diversi per outer join
  • Sì, ho modificato a implica alcun tipo di join.
  • Aveva utilizzato inner join stesso? o Outer join?
  • Ricordo vagamente un esterno sinistro
  • Cerchiamo di continuare questa discussione in chat.
  • Poi si dovrà passare attraverso il link dato da CoderofCode 🙂
  • possibile duplicato di INNER JOIN SU vs clausola WHERE
  • No bro. Non è un duplicato di che. Il link di cui sopra è stato già postato e rimosso dai commenti 🙂

InformationsquelleAutor RoyalSwish | 2015-03-12

 

One Reply
  1. 1

    Non c’è alcuna differenza tra le due versioni, tranne se hai sbagliato la precedenza in uno di essi a causa della mancanza di parentesi.

    • Il tempo inner join e non outer join!
    • Sì. Entrambe le versioni di cui sopra solo per uso INNER JOIN. Se avessero più ESTERNO, che sarebbe totalmente diverso.

Lascia un commento