Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107

    [Mysql] Piccolo problema con query

    Salve a tutti!

    Devo fare una query di questo tipo
    codice:
     SELECT * FROM FATTURE
    LEFT OUTER JOIN CLIENTI ON F_CLIENTE=IDCLIENTE
    HAVING CLIENTE.PROV='MI'
    Cioè: prende a prescindere TUTTE le fatture e prende anche il cliente relazionato SOLO se è di MILANO.

    Però se faccio così (e nessuno fosse di MILANO) non mi prende nulla
    Guybrush Threepwood

  2. #2
    having dovresti usarlo solo con group by.

    in pratica fa una ulteriore scelta sui record estratti dal db con where

    con left join estrai tutte le fatture e se non c'e' il riferimento cliente voluto ci mette un NULL.

    codice:
    SELECT * FROM FATTURE
    INNER JOIN CLIENTI ON F_CLIENTE = IDCLIENTE
    WHERE CLIENTE.PROV='MI'
    cosi' ti prende solo le fatture dove il cliente e' di Milano. niente clienti di milano niente fatture.

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

  3. #3
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    Difatti il problema era questo...

    in pratica dovrei prendere
    - tutte le fatture
    - i clienti (relazionati) ma di milano

    Fare 2 query su tanti dati sai meglio di me cosa viene fuori
    Guybrush Threepwood

  4. #4
    Originariamente inviato da Threepwood
    Difatti il problema era questo...

    in pratica dovrei prendere
    - tutte le fatture
    - i clienti (relazionati) ma di milano

    Fare 2 query su tanti dati sai meglio di me cosa viene fuori
    dalla risposta non capisco se hai risolto o no.

    Se prendi "TUTTE" le fatture a prescindere devi user LEFT JOIN ma a questo punto che centra Milano se le fatture sono TUTTE.

    Se prendi TUTTE le fatture di MILANO allora inner join come proposto.

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

  5. #5
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    purtroppo non ho risolto

    in realtà ho usato un esempio che non calza a pennello...

    mettiamola così

    Devo selezionare tutti i fornitori e relazionarvi tutti i clienti di milano (così forse è un po + reale).
    Per cui ho a prescindere tutti i fornitori e, relazionati, solo i clienti milanesi
    Guybrush Threepwood

  6. #6
    Originariamente inviato da Threepwood
    purtroppo non ho risolto

    in realtà ho usato un esempio che non calza a pennello...

    mettiamola così

    Devo selezionare tutti i fornitori e relazionarvi tutti i clienti di milano (così forse è un po + reale).
    Per cui ho a prescindere tutti i fornitori e, relazionati, solo i clienti milanesi
    prendi tutti i fornitori associati a tutti i clienti ed in fase di stampa escludi tutti i non milanesi con una if.

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

  7. #7
    Giusto per la cronaca, ma in queste righe:

    SELECT * FROM FATTURE
    INNER JOIN CLIENTI ON F_CLIENTE = IDCLIENTE
    WHERE CLIENTE.PROV='MI'

    c'è un errore:

    WHERE CLIENTE.PROV='MI' ma la tabella si chiama CLIENTE o CLIENTI?

  8. #8
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    Originariamente inviato da piero.mac
    prendi tutti i fornitori associati a tutti i clienti ed in fase di stampa escludi tutti i non milanesi con una if.
    il tuo consiglio (x la serie "più è semplice, più è difficile da trovare") andava bene... però ora, in un'altra occasione, non lo posso usare.

    Difatti un'altra query di questo tipo la visualizzo su 3 colonne con php che apre e chiude dinamicamente le <tr> e <td>.

    Proprio non c'è modo da query di far quella selezione li? (che con mysql 5 si potrebbe fare con le subquery....)
    Guybrush Threepwood

  9. #9
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    non si potrebbe formulare magari con una CASE/THEN/WHEN?
    Guybrush Threepwood

  10. #10
    Originariamente inviato da Threepwood
    Proprio non c'è modo da query di far quella selezione li? (che con mysql 5 si potrebbe fare con le subquery....)
    Scusa ma ke versione di MySQL usi? Perché dalla 4.1 si possono usare le subquery ed in tal caso la query diverrebbe:

    SELECT *
    FROM fatture as F LEFT OUTER JOIN (SELECT * FROM clienti WHERE prov='MI') as C
    on F.f_cliente=C.id_cliente

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.