Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [MYSQL] JOIN dopo WHERE

    ciao a tutti.

    Mi dicevano che è possibile mettere la JOIN dopo la where in modo da avere un ricerca più veloce.
    Secondo voi ha senso una cosa del genere:

    select * from mercatino where mercatino.id_rubrica = 1 INNER JOIN mercatino_rubriche ON mercatino_rubriche.id = mercatino.id_rubrica

    Tenendo conto che la tabelle sono così fatte:
    - mercatino(id , descrizione, id_rubrica)
    - mercatino_rubriche (id , rubrica)

    Ciao

  2. #2
    Se lo provassi riceveresti un errore.... quindi... si direbbe di no...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    mi hanno detto che si può fare perchè in questo modo verrebbe fatta prima una scrematura con la WHERE e poi si passa alla JOIN.

  4. #4
    [supersaibal]Originariamente inviato da senorluca
    mi hanno detto che si può fare perchè in questo modo verrebbe fatta prima una scrematura con la WHERE e poi si passa alla JOIN. [/supersaibal]
    In teoria potrebbe essere vero. Pero' in realta' per prima cosa viene risolto il nome della tabella, poi il where con le altre condizioni fa la scrematura dei record su una tabella provvisoria (in caso di join e non solo) e la popola.

    Quindi il nome delle tabelle deve essere risolto "prima" di WHERE.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Oggi avrò il famoso confronto diretto con chi mi ha sparato questa cavolata ... e spero di non fare una figura barbina....
    ciao

    e grazie ancora

  6. #6
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    ben inteso:

    SELECT * FROM miatabella JOIN altratabella ON <condizione>

    equivale a:

    SELECT * FROM miatabella, altratabella WHERE <condizione>

    teoricamente sono la stessa cosa, di solito per comprendere un join si parte dalla seconda forma per arrivare alla prima

    le prestazioni delle due forme dovrebbero equivalersi... più o meno, con l'unica differenza che la prima forma è più esplicita della seconda e quindi un database potrebbe accellerare di poco le prestazioni usando la prima. Sono mie congetture però

    Io uso la prima perché è più chiara e rende il codice più leggibile separando le join dalle condizioni semplici

  7. #7
    il guaio è che quello che diceva "MISTER SQL" è che potevo fare:
    SELECT * FROM tabella WHERE tabella.campo_1 = 1 JOIN tabella2 ON tabella2.campo_2 = tabella.campo_3

    chi vivrà ... vedrà

  8. #8
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    [supersaibal]Originariamente inviato da senorluca
    il guaio è che quello che diceva "MISTER SQL" è che potevo fare:
    SELECT * FROM tabella WHERE tabella.campo_1 = 1 JOIN tabella2 ON tabella2.campo_2 = tabella.campo_3

    chi vivrà ... vedrà [/supersaibal]
    questo è impossibile, la join è ammessa solo nella fase dichiarativa delle tabelle, che è quella del from

    anche nella forma che ti ho postato, le tabelle coinvolte le mettevo comunque nel from

  9. #9
    Ho messo di fronte al fatto compiuto, e mi ha proposto questo:

    SELECT TmpFilm.Titolo, Attori.Cognome
    FROM (SELECT Titolo, AttoreProtagonista FROM Film WHERE Durata = 120)
    AS TmpFilm
    INNER JOIN Attori
    ON TmpFilm.AttoreProtagonista = Attori.Code

    ma funziona con SQLServer e non con mysql.

    A quanto ne so io, non si può fare una select nella select.

    vedete un po'

    ciao

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    [supersaibal]Originariamente inviato da senorluca
    A quanto ne so io, non si può fare una select nella select.
    ciao [/supersaibal]
    Si chiamano subquery, esistono ma MySql le supporta solo a partire dalla versione 4.1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.