• User

    [Access&Vbscript]creazione query su tre tabelle

    Ciao a tutti
    Ho un problema che non so come risolvere ,L'unico metodo per farvi capire cosa vorrei fare e partire da un esempio di questo tipo

    Ho un Database.mdb
    Con dentro la tabella clienti e **annunci **

    Dentro Clienti ho i campi
    ID(contatore) , nome(text) , indirizzo(text)

    Dentro Annunci ho
    ID(contatore) , ID_Clienti(numerico) , cek1(num.) ,ann1(text),cek2(num),ann2(text).

    Adesso con una select di questo tipo :

    SELECT * FROM Clienti , Annunci  WHERE   Clienti.ID = Annunci.ID_Clienti and Annunci.cek1='1'  or    Annunci.cek1='1'  "
    ```La risposta della select saranno tutti i record che hanno la corrispondenza  Clienti.ID = Annunci.ID_Clienti e che abbiano anche una corrispondenza sul campo Annunci.cek1='1' oppure sul campo Annunci.cek1='1' 
    
    Adesso ,per ottenere la risposta che voglio aggiungo due if quando richiamo i vari record 
    
    
        <td ><%=(Re1cgl("NOME").Value)%></td>
        <td><%=(Re1cgl("INDIRIZZO").Value)%></td>
        <td >    
    

    <% if (Re1cgl("cek1"))="1" then response.write(Re1cgl("ann1")) else response.write(null) end if %>
    </td>
    <td >
    <%if (Re1cgl("cek2"))="1" then response.write(Re1cgl("ann2")) else response.write(null) end if %>
    </td>

    In questo modo  filtro il risultato dicendogli :che se cek1 è uguale a 1  fammi vedere il record ann1 se no ,non scrivere niente .La stessa cosa nel cek2 per ann2 
    
    Adesso il mio problema avere lo stesso risultato ma avendo 3 tabelle nel database
    del tipo:
    **Clienti** ho i campi 
    **ID**(contatore) , **nome**(text) , **indirizzo**(text)
    
    **Annunci1**
    **ID**(contatore) , **ID_Clienti**(numerico) , **cek1**(num.) , **ann1**(text)
    
    **Annunci2**
     **ID**(contatore) , **ID_Clienti**(numerico) , **cek2**(num) , **ann2**(text).
    
    
    Ho provato di tutto ma non trovo la soluzione ,caso mai chiedo una cosa impossibile ,se così fosse FERMATEMI!!!!:o

  • User

    Non basta fare cosi?
    **SELECT * FROM Clienti , Annunci WHERE (Clienti.ID = Annunci1.ID_Clienti and Annunci1.cek1='1' or Annunci1.cek1='1') AND (Clienti.ID = Annunci2.ID_Clienti and Annunci2.cek2='1' or Annunci2.cek2='1')

    Anche se "or Annunci1.cek" non so a cosa ti possa servire visto che la condizione precedente è AND

    Altrimenti fai una leftjoin con le tre tabelle
    **


  • User

    @karnak said:

    Non basta fare cosi?
    SELECT * FROM Clienti , Annunci WHERE (Clienti.ID = Annunci1.ID_Clienti and Annunci1.cek1='1' or Annunci1.cek1='1') AND (Clienti.ID = Annunci2.ID_Clienti and Annunci2.cek2='1' or Annunci2.cek2='1')

    Anche se "or Annunci1.cek" non so a cosa ti possa servire visto che la condizione precedente è AND

    Altrimenti fai una leftjoin con le tre tabelle

    No non basta fare così ,a parte che non puoi controllare due volte lo stesso campo ,non ha senso e poi al massimo potrebbe essere
    SELECT * FROM Clienti , Annunci WHERE (Clienti.ID = Annunci1.ID_Clienti and Annunci1.cek1='1') or (Clienti.ID = Annunci2.ID_Clienti and Annunci2.cek2='1' )
    ma anche così non funziona

    Vediamo di aggiornare la situazione in questo modo
    Ho il mio database
    con la tabella Clienti ,così compilata
    ****://img697.imageshack.us/img697/2416/tabclienti.jpg

    AnnunciF
    ****://img255.imageshack.us/img255/8393/tabannuncif.jpg

    AnnunciV
    ****//img255.imageshack.us/img255/5750/tabannunciv.jpg

    Ho fatto questa SELECT :

    SELECT Clienti.nome, AnnunciF.concertif, AnnunciF.oraf, AnnunciF.giornof, AnnunciF.annuncio_f, AnnunciV.annuncio_v, AnnunciV.settimana, AnnunciV.giornov, AnnunciV.orav
    FROM (Clienti LEFT JOIN AnnunciF ON Clienti.ID = AnnunciF.ID_Clienti) LEFT JOIN AnnunciV ON Clienti.ID = AnnunciV.ID_Clienti
    WHERE (((AnnunciF.concertif)="1") AND ((AnnunciF.oraf)="giorno") AND ((AnnunciF.giornof)="lunedi")) OR (((AnnunciV.annuncio_v)="1") AND ((AnnunciV.settimana)=14) AND ((AnnunciV.giornov)="lunedi") AND ((AnnunciV.orav)="giorno"));
    
    ```Che mi riporta i seguenti record :
    ****://img532.imageshack.us/img532/4562/query.jpg
    
    
    Adesso il problema è che non mi riporta il record con ID 1645 di tabella AnnunciV . che ha tutte le condizioni della WHERE 
    
    Se pero in AnnunciV ci sarebbero stati due record con ID 2  così
    ****://img535.imageshack.us/img535/6766/annunciv2.jpg
    quindi due ID 2 ma con il campo settimana diverso 
    
    La risposta della select(citata sopra) è questa 
    ****://img709.imageshack.us/img709/5246/query2c.jpg
    
    :x:x
    Qualcuno puo illuminarmi?