Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di eng
    Registrato dal
    Mar 2002
    Messaggi
    1,227

    selezione con sottoquery multiple...

    ciao a tutti, ho un problema che non risco proprio a risolvere.
    Semplifico con un esempio.

    Ho una tabella con i seguenti campi:
    ID tipo numerico contatore
    i_p tipo numerico
    i_j tipo numerico
    val tipo testo

    ed in particolare i seguenti record (set di valori) della quaterna
    ID,i_p,i_j,val

    1,1,10,x
    2,1,13,x
    3,2,10,x
    4,3,15,x

    consiglio di graficare i valori inun grafico con ascisse i_j, ordinate i_p e incrocio dei due val.
    otterreste :

    (i_p;i_j)
    ---------------------10,13,15
    1--------------------x---x--NULL
    2--------------------x---NULL--NULL
    3--------------------NULL-NULL-x

    Osservo i record con i_j=10 e i_j=13.

    Vorrei sezionare i valori di i_p che soddisfano simultaneamente le seguenti condizioni
    a) i_j=10 AND val='x'
    b) i_j=13 AND val=NULL

    Come fare ?

    Intuisco che bisogna usare delle sottoquery...

    SELECT i_p FROM table WHERE i_p IN ( SELECT i_p FROM p_j WHERE(i_j=10) AND (val LIKE 'x')) AND i_j=13 AND val<>'%%'

    Ma non fa quello che voglio ...

    Grazie
    ciao
    EnG.

  2. #2
    codice:
    SELECT i_p FROM table WHERE (i_j=10 AND val = 'x') AND (i_j=13 AND val IS NULL)

  3. #3
    Utente di HTML.it L'avatar di eng
    Registrato dal
    Mar 2002
    Messaggi
    1,227
    Originariamente inviato da optime
    codice:
    SELECT i_p FROM table WHERE (i_j=10 AND val = 'x') AND (i_j=13 AND val IS NULL)
    grazie del suggerimento, ma non funziona...faccio qualche errore?
    Ho messo QUI file asp + db che chi vorrà cimentarsi....


    Ho provato anche con


    SQL = "SELECT * FROM table WHERE (i_j=10 AND val = 'x') AND NOT EXISTS (SELECT * FROM p_j WHERE i_j=13 )"


    ma il risultato è un insieme vuoto di records

    grazie

  4. #4
    Utente di HTML.it L'avatar di eng
    Registrato dal
    Mar 2002
    Messaggi
    1,227

    PRECISAZIONE

    ho scritto NULL , ma intendevo che il record composto dalla quaterna (id, i_p, i_j, val)
    con val non specificato NON ESISTE.
    Vedete il database.

    Come posso risolvere a livello di codice il problema, senza introdurre record aggiuntivi in DB?

    In partica da tutti i record con i_j=10 e val =x dovrei togliere tutti quelli che hanno i_j=13 e un val <> null....

    grazie

  5. #5
    Utente di HTML.it L'avatar di eng
    Registrato dal
    Mar 2002
    Messaggi
    1,227
    Ho provato

    SQL = "SELECT * FROM p_j WHERE i_j=13"

    che mi restituisce il record con ID=i_p_j=2

    SQL = "SELECT * FROM p_j WHERE i_j=10)"

    che mi restituisce il record con ID=i_p_j= 1 e 2


    ora dovrei "togliere" al secondo insieme di record il primo con



    SQL = "SELECT * FROM p_j WHERE (i_j=10 AND val = 'x') AND (NOT i_j=13)"

    oppure con l'equivalente

    SQL = "SELECT * FROM p_j WHERE (i_j=10 AND val = 'x') AND (i_j<>13)"

    ma mi ritornano sempre i record 1 e 2.


    Provo allora con:

    SQL = "SELECT * FROM p_j WHERE i_p IN (SELECT * FROM p_j WHERE i_j=10 AND val = 'x') AND (NOT i_j=13)"
    oppure con
    SQL = "SELECT * FROM p_j WHERE i_p IN (SELECT * FROM p_j WHERE i_j=10 AND val = 'x') AND (i_j<>13)"

    ma ottengo un errore:
    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [Microsoft][Driver ODBC Microsoft Access] È stata scritta una sottoquery che può restituire più campi senza utilizzare la parola riservata EXISTS nella proposizione FROM della query principale. Modificare l'istruzione SELECT nella sottoquery per richiedere soltanto un campo


    Dove sbatto la testa ?

  6. #6
    Utente di HTML.it L'avatar di eng
    Registrato dal
    Mar 2002
    Messaggi
    1,227
    in pratica dovrei filtrare

    SELECT * FROM p_j WHERE (i_j=10 AND val = 'x')

    con

    SELECT * FROM p_j WHERE (NOT i_j=13)


    come fare ?

  7. #7
    SELECT * FROM p_j WHERE (i_j=10 AND val = 'x' AND i_j<>13)

  8. #8
    Utente di HTML.it L'avatar di eng
    Registrato dal
    Mar 2002
    Messaggi
    1,227
    ecco qui, ho risolto, per gli interessati:

    SELECT * FROM p_j WHERE i_p IN (SELECT i_p FROM p_j WHERE (i_j=10 AND val = 'x')) AND i_p NOT IN (SELECT i_p FROM p_j WHERE (i_j=13))

    grazie a tutti

  9. #9
    a parte la complicazione cervellotica delle sub-select (e la conseguente pesantezza in termini di esecuzione) non vedo differenze con la mia.

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