Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    1,056

    [mysql] inner join senza "on"

    Ciao a tutti,
    ho delle query così:

    SELECT * FROM tab1
    INNER JOIN tab2
    INNER JOIN tab3
    WHERE tab1.id_1 = tab2.id_1
    AND tab2.id_2 = tab3.id_2

    ecc...

    la query funziona perfettamente..
    ma è giusto usare WHERE invece di ON?

    Potrebbe causare problemi a mysql (lo vedo affaticato, ma ho su diversi siti e non so se è questo il problema..)

    grazie

  2. #2
    decisamente hai sbagliato forum, dovevi postare su quello mysql. in ogni caso anche secondo me non dovrebbe funzionare (ma uso mssql di solito) ^^
    Fiore Bat - www.bcscommunity.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    1,056
    scusate... per l'errore di forum..

    no in realtà funziona, anche da phpmyadmin..

    il problema che mi pongo è se c'è differenza nell'utilizzo risorse..

    grazie

  4. #4
    Originariamente inviato da Bregovic
    il problema che mi pongo è se c'è differenza nell'utilizzo risorse..

    grazie
    Il problema e' piu' che altro di maggior leggibilita' dello script. Sia in un caso che nell'altro (condizioni in ON o nel where) si tratta pur sempre di valori in AND tra di loro.

    Pero' il mettere le condizioni nel WHERE e' tipico della forma JOIN THETA mentre l'uso della clausola ON e' della forma JOIN ANSI (piu' recente e meglio leggibile).

    in pratica si dovrebbe usare:
    codice:
    -- ANSI
    SELECT * FROM tab1
    INNER JOIN tab2 ON tab1.id_1 = tab2.id_1
    INNER JOIN tab3 ON tab2.id_2 = tab3.id_2
    WHERE [Altre condizioni]
    
    --THETA
    SELECT * FROM tab1, tab2, tab3
    WHERE tab1.id_1 = tab2.id_1
    AND tab2.id_2 = tab3.id_2
    AND [altre condizioni]

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

  5. #5
    cmq puoi fare il "profiling" delle query per vedere quale sta troppo.

    prova a seguire questa semplice guida:
    Codice PHP:
    Getting started with the SQL Profiler

    The SQL Profiler is built into the database server 
    and can be dynamically enabled/disabled via the MySQL client utilityTo begin profiling one or more SQL queriessimply issue the following command:

    mysqlset profiling=1;
    Query OK0 rows affected (0.00 sec)

    Two things happen once you issue this commandFirstany query you issue from this point on will be traced by the server with various performance diagnostics being created and attached to each distinct querySeconda memory table named profiling is created in the INFORMATION_SCHEMA database for your particular session (not viewable by any other MySQL sessionthat stores all the SQL diagnostic resultsThis table remains persistent until you disconnect from MySQL at which point it is destroyed.

    Nowsimply execute a SQL query:

    mysqlselect count(*) from client where broker_id=2;
    +----------+
    count(*) |
    +----------+
    |      
    200 |
    +----------+
    1 row in set (0.00 sec)

    Once the query completesyou can issue the following command to view the SQL profiles that have currently been stored for you:

    mysqlshow profiles;
    +----------+------------+-----------------------------------------------+
    Query_ID Duration   Query                                         |
    +----------+------------+-----------------------------------------------+
    |        
    0.00007300 set profiling=1                               |
    |        
    0.00044700 select count(*) from client where broker_id=|
    +----------+------------+-----------------------------------------------+
    2 rows in set (0.00 sec
    Fiore Bat - www.bcscommunity.it

  6. #6
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Ci sono sempre dibattiti se è meglio usare la JOIN implicita (senza ON e tutto nella WHERE) piuttosto che quella esplicita.

    Io credo che come performance siamo sugli stessi tempi in entrambi i casi.

    Però... la leggibilità delle JOIN con le ON è un valore aggiunto, quindi io scelgo sempre la notazione estesa.

  7. #7
    I piani di esecuzione delle query con MSSQL stimano indicativamente la stessa complessità di risoluzione. Quindi credo che l'uno o l'altro costrutto sia assolutamente indifferente se non ai fini, come già correttamente detto, di leggibilità della query. Certo forse lo standard THETA è più "didattico" mentre quello ANSI è più usato in produzione.
    Personalmente ho scritto query sempre nel formato ANSI.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.