Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Problema Query con INNER JOIN che estrae se num righe > 5

    Buongiorno programmatori,
    Ho una query che estrae molte colonne per stampare un file csv , a questa query ho bisogno di applicare un filtro dicendo che il numero di allievi (id_allievo) della tabella allievi ,collegata per id_sedeCliente a tutte le altre, deve essere >5.
    Per ora ho provato con alcune soluzioni che girano intorno a questa ma non funzionano.
    Qualcuno sa aiutarmi?
    codice:
    SELECT * FROM allievo AL
           INNER JOIN(
           SELECT  IND.id_sedeCliente,
                   SOC.ragioneSociale,
                   IND.toponimo,      
                   IND.indirizzo,
                   IND.civico,
                   IND.cap,
                   IND.comune,
                   IND.provincia,
                   SER.servizioAllievo,
                   SER.permessi,
                   SER.abilitato  
                 FROM societacliente SOC
                  INNER JOIN sedecliente SEDE ON SEDE.id_societaCliente= SOC.id_societaCliente                                    INNER JOIN indirizzosedecliente IND ON IND.id_sedeCliente=SEDE.id_sedeCliente                                  INNER JOIN servizi SER ON SER.id_sedeCliente= SEDE.id_sedeCliente  
                 WHERE SOC._Stato!= 'D'        ) AS SCUOLE        ON AL.id_sedeCliente =SCUOLE.id_sedeCliente                HAVING COUNT(*) > 5
    in altre parole devo estrarre tutte le sedi (con relative colonne di indirizzo ecc.) che hanno almeno 5 allievi e stato!=D

  2. #2
    devi aggiungere una COUNT() e filtrare con HAVING

    se ci dici con che db lavori forse si può essere più precisi

  3. #3
    Non so perchè non ha formattatto bene il messaggio, se scorri verso sinistra c' è già!

    Il problema è che sono 400.000 sedi con un po' di allievi ciascuno, la query da eseguire è lentissima.
    Uso phpmyAdmin con MariaDB come server.
    Ultima modifica di Maxilboss93; 09-02-2022 a 17:41

  4. #4
    1. riformatta e ripubblica
    2. fatti stampare anche il count() così capisci se conta le cose giuste

  5. #5
    codice:
    SELECT * FROM allievo AL
           INNER JOIN(
           SELECT  IND.id_sedeCliente,
                   SOC.ragioneSociale,
                   IND.toponimo,      
                   IND.indirizzo,
                   IND.civico,
                   IND.cap,
                   IND.comune,
                   IND.provincia,
                   SER.servizioAllievo,
                   SER.permessi,
                   SER.abilitato  
                   FROM societacliente SOC
                   INNER JOIN sedecliente SEDE ON SEDE.id_societaCliente= SOC.id_societaCliente   
                   INNER JOIN indirizzosedecliente IND ON IND.id_sedeCliente=SEDE.id_sedeCliente 
                    INNER JOIN servizi SER ON SER.id_sedeCliente= SEDE.id_sedeCliente  
                    WHERE SOC._Stato!= 'D'        ) AS SCUOLE  
                    ON AL.id_sedeCliente =SCUOLE.id_sedeCliente 
                    HAVING COUNT(*) > 5

  6. #6
    Mi ha restituito un filtro di 768 elementi ma dopo circa mezz'ora dopo aver lanciato la pagina PHP con la query all' interno.

  7. #7

  8. #8
    codice:
    SELECT
       * 
    FROM
       allievo AL 
       INNER JOIN
          (
             SELECT
                IND.id_sedeCliente,
                SOC.ragioneSociale,
                IND.toponimo,
                IND.indirizzo,
                IND.civico,
                IND.cap,
                IND.comune,
                IND.provincia,
                SER.servizioAllievo,
                SER.permessi,
                SER.abilitato 
             FROM
                societacliente SOC 
                INNER JOIN
                   sedecliente SEDE 
                   ON SEDE.id_societaCliente = SOC.id_societaCliente 
                INNER JOIN
                   indirizzosedecliente IND 
                   ON IND.id_sedeCliente = SEDE.id_sedeCliente 
                INNER JOIN
                   servizi SER 
                   ON SER.id_sedeCliente = SEDE.id_sedeCliente 
             WHERE
                SOC._Stato != 'D' 
          )
          AS SCUOLE 
          ON AL.id_sedeCliente = SCUOLE.id_sedeCliente 
    HAVING
       COUNT(*) > 5

  9. #9
    dov'è che conti gli alunni per scuola?

  10. #10
    SELECT
    *
    FROM
    allievo AL
    INNER JOIN([...])
    Having
    count(*) > 5

Tag per questa discussione

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.