Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23

Discussione: [SQL] Problema query

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225

    [SQL] Problema query

    Ho il seguente schema:

    Prodotto(id_prod, nome, descrizione, prezzo)
    Scontrino(id_scontr, data, totale)
    Dettaglio(id_scontr, id_prod, quantita)

    Trovare i prodotti che non sono apparsi nello stesso scontrino....

    Io ho provato prima così:

    Codice PHP:
    SELECT *
    FROM SELECT Dettaglio.id_scontr AS S1Prodotto.id_prod AS P1
           FROM Dettaglio JOIN Prodotto 
    ) AS tab1
    WHERE tab1
    .P1 NOT IN SELECT Dettaglio.id_prod
                           FROM Dettaglio 
    )
    AND 
    tab1.S1 IN SELECT Dettaglio.id_scontr
                         FROM Dettaglio 

    e poi così:
    Codice PHP:
    SELECT Dettaglio.id_scontr AS S1Prodotto.id_prod AS P1
      FROM Dettaglio JOIN Prodotto 
      GROUP BY Dettaglio
    .id_scontrProdotto.id_prod)
    INTERSECT
    SELECT Dettaglio.id_scontr AS S2Dettaglio.id_prod AS P2
      FROM Dettaglio 

    la seconda è formata dalla prima tab che include tutte le occorrenze possibili (tra gli scontrini e i prodotti) intersecata alla seconda che include i prodotti che compaiono in ogni scontrino....ma nemmeno questo funziona...

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Ciao

    codice:
    select dettaglio.id_scontr,prodotto.id_prod,prodotto.nome
    from dettaglio
    left join prodotto on id_prod=dettaglio.id_prod
    where dettaglio.id_scontr=:NumeroScontrino
    il comando GROUP va usato in congiunzione con una funzione statistica come ad esempio SUM...

    nella struttura delle tue tabelle ho visto che la tabella 'dettaglio' non ha un campo ID: a me hanno insegnato che ogni tabella deve avere un campo id univoco che contraddistingue ogni suo record, questo per un ordine logico ed anche per ottimizzare le prestazioni....

    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225
    il comando GROUP va usato in congiunzione con una funzione statistica come ad esempio SUM...
    mmm....forse

    la tabella 'dettaglio' non ha un campo ID
    id_scontr, id_prod sono le chiavi

    where dettaglio.id_scontr=:NumeroScontrino
    NumeroScontrino non esiste! :master:

    e poi come mi hai indicato tu non funziona nemmeno..
    Altra soluzione?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Citazione:
    il comando GROUP va usato in congiunzione con una funzione statistica come ad esempio SUM...

    mmm....forse
    senza forse.. è così..

    Per ottenere ciò che vuoi dovresti trovare tutti i prodotti e sottrarre (not in) tutti i prodotti di un dato scontrino, questo per ogni scontrino..

    La cosa la vedrei meglio con una funzione.. ora penso ad una possibile query

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    provo:

    codice:
    prodotto = P
    dettaglio = D
    scontrino = S
    
    SELECT P.descr, S.id
    FROM P, S
    WHERE P.id not in (
                              SELECT P.id
                              FROM P right join D left join S)
    questa però ti da i prodotti che non stanno in nessuno scontrino..

    non mi viene in mente come applicarla scorrendo gli scontrini..

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225
    niente da fare ...non funziona

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao,

    non ho ben capito cosa vuoi come risultato!

    Per ogni scontrino emesso, vuoi la lista degli articoli non presenti nello scontrino?

    codice:
    select 
    Prodotto.id_prod, 
    Prodotto.nome, 
    from prodotto
    where prodotto.id_prod not in 
    (select dettaglio.id_prod from dettaglio where dettaglio.id_scontr=:MioScontrino)
    nb.:MioScontrino e' un parametro esterno

    ciao

  8. #8
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    come giustamente detto da delphi321 la query che ti abbiamo scritto io e lui deve essere usata per ogni scontrino.. quindi devi parametrizzarla o farne una funzione che venga usata per ogni id_scontrino..

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225
    ragazzi, scusate...forse non mi sono espresso male...
    graficamente, dovrei crearmi una tab che contiene tutte le combinazioni possibili tra gli scontrini e i prodotti

    Codice PHP:
    /* Tab1 */
    id_scontr id_prod

    S1   
    |  P1
    S1   
    |  P2
    S1   
    |  P3
    S2   
    |  P1
    S2   
    |  P2
    S2   
    |  P3
    S3   
    |  P1
    S3   
    |  P2
    S3   
    |  P3 
    e sottrarla alla tab 'dettaglio', ad es:

    Codice PHP:
    /*Dettaglio*/

    id_scontr id_prod

    S1   
    |  P1
    S1   
    |  P3
    S2   
    |  P2
    S3   
    |  P2
    S3   
    |  P3 
    e dare così il risultato:

    Codice PHP:
    id_scontr id_prod

    S1   
    |  P2
    S2   
    |  P1
    S2   
    |  P3
    S3   
    |  P1 
    la differenza insomma, e no l'intersezione (come precedentemente ho errato)...quindi io pensavo una cosa del genere:

    Codice PHP:
    SELECT Dettaglio.id_scontrProdotto.id_prod
      FROM Dettaglio JOIN Prodotto 
    )   /* Cioè la Tab1 */
    EXCEPT
    SELECT Dettaglio.id_scontrDettaglio.id_prod
      FROM Dettaglio 
    )  /* cioè la Tab 'Dettaglio' */ 
    Scusate se vi ho fatto incasinare...

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Ciao Danelius,

    scusami ma oggi per me e' una giornataccia.... proprio non riesco a capire quale sia il tuo obiettivo....

    per cortesia potresti re-illustrarlo....

    grazie

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.