Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,906

    [MYSQL] Query su tre tabelle con esclusione

    Dunque non riesco a venirne a capo.
    Ho tre tabelle:
    tabella 1 commesse, composta da id_commessa e id_cliente e altri svariati campi che non interessano.
    tabella 2 rel_commesse_risorse composta da id_commessa e id_risorsa
    tabella 3 clienti composta da id_cliente nome_cliente e tutti gli altri svariati campi che non interessano.
    Ora il problema è questo devo trovare il modo con una query sola di estrarre da queste 3 tabelle tutte le commesse e relativo cliente NON ASSOCIATE ad una risorsa.
    Avevo pensato a una cosa del genere:
    Codice PHP:
    select a.* from commesse a,  rel_commesse_risorse b WHERE b.id_commessa != a.id_commessa AND b.id_risorsa != $id_risorsa 
    ma non vado da nessuna parte, se qualche anima pia sa come venirne a capo

  2. #2
    Fai una prova:
    codice:
    select * 
    from commesse a
    LEFT JOIN rel_commesse_risorse b ON b.id_commesse = a.id_commesse
    LEFT JOIN clienti c ON  c.id_cliente = a.id_cliente
    WHERE a.id_commesse IS NULL

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

  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Se ho capito bene e se hai mysql >= 4.1 (puoi usare le subqueries):

    SELECT a.* from commesse a
    WHERE a.id_commessa
    NOT IN
    (SELECT id_commessa FROM rel_commesse_risorse b WHERE b.id_risorsa = $id_risorsa)

  4. #4
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,906
    a questa non la sapevo, bella cosa e si usano con le parentesi tonde?

  5. #5
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    [supersaibal]Originariamente inviato da olivs
    a questa non la sapevo, bella cosa e si usano con le parentesi tonde? [/supersaibal]
    Si, con le parentesi tonde.
    La versione di Piero.mac è la stessa cosa (a parte il join con la terza tabella) per versioni di mysql < 4.1 (non prevedono le subqueries).

  6. #6
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,906
    allora mi sono informato devo usare mysql 4.0 quindi niente subqery
    ora vedo che cosa diavolo fa quella di piero, che cosi a ochio e croce mi sa che non reistituisce nulla

  7. #7
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    [supersaibal]Originariamente inviato da olivs
    allora mi sono informato devo usare mysql 4.0 quindi niente subqery
    ora vedo che cosa diavolo fa quella di piero, che cosi a ochio e croce mi sa che non reistituisce nulla [/supersaibal]
    Se ti può aiutare: http://dev.mysql.com/doc/mysql/en/re...ubqueries.html

  8. #8
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,906
    Ok ci sono quasi
    Codice PHP:
    select a.id_commessaa.nome_commessaa.numero_commessaa.note_commessac.nome_cliente
    from commesse a LEFT JOIN rel_commesse_risorse b 
    ON b
    .id_commessa a.id_commessa
    LEFT JOIN clienti c ON  c
    .id_cliente a.id_cliente
    WHERE b
    .id_commessa IS NULL 
    Ho solo questo dubbio qui non specifico mai il campo ID_RISORSA che pero mi serve per escludere i dati, mettendo il where b.id_risorsa!=$Id_risorsa si rompe tutto

  9. #9
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    [supersaibal]Originariamente inviato da olivs
    Ok ci sono quasi
    Codice PHP:
    select a.id_commessaa.nome_commessaa.numero_commessaa.note_commessac.nome_cliente
    from commesse a LEFT JOIN rel_commesse_risorse b 
    ON b
    .id_commessa a.id_commessa
    LEFT JOIN clienti c ON  c
    .id_cliente a.id_cliente
    WHERE b
    .id_commessa IS NULL 
    Ho solo questo dubbio qui non specifico mai il campo ID_RISORSA che pero mi serve per escludere i dati, mettendo il where b.id_risorsa!=$Id_risorsa si rompe tutto [/supersaibal]
    E' vero, l'ho potuto riscontrare anch'io quando ho avuto un problema simile al tuo.
    E' un grosso problema per te fare due query?

  10. #10
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,906
    Si meno ne faccio meglio é
    ora sono a questa

    select a.id_commessa, a.nome_commessa, a.numero_commessa, a.note_commessa, c.nome_cliente
    from commesse a
    LEFT JOIN rel_commesse_risorse b ON b.id_commessa = a.id_commessa and b.id_risorsa=$id_risorsa
    LEFT JOIN clienti c ON c.id_cliente = a.id_cliente
    WHERE b.id_commessa IS NULL

    ma non è ancora precisa infatti si incarta spesso in troppi casi

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.