• User

    problema con un join con mysql

    Ciao ragazzi,
    spero che mi possiate aiutare a risolvere questo mio problema...che mi fa impazzire da 3 giorni..

    Innanzitutto vi dico che questo problema riguarda 2 tabelle presente in un DB MYSQL

    • TBL_Report, composta da:
      Id
      IdNews
      IdIscritto

    • TBL_Iscritti, composta da:
      Id
      IdAdmin
      Abilitato [tipo campo INT -con valori possibili 0/1]
      Richiesta Cancellazione [tipo campo DATE]

    Adesso, il problema è questo, dovrei "prelevare" tutti gli iscritti inseriti nella TBL_ISCRITTI che non siano presenti nella TBL_REPORT che fanno parte di un determinato IDADmin, che abbiano nel campo Abilitato lo 0, che non abbiano richiesto la cancellazione (quindi che il campo sia vuoto) e che non abbiano abbinato una IDNews che ho richiesto per il controllo.

    La query che ho fatto è questa:

    Select * FROM TBL_ISCRITTI A LEFT JOIN TBL_Report B ON A.Id <>** B.IdIScritto WHERE A.IdAdmin = 3 AND IsNull(A.Richiesta_Cancellazione) And A.Abilitato = 0 AND B.IdNews = 23**

    Ma purtroppo non funziona...riuscite a capire il perchè ?!!? 😞
    Mi restituisce sempre un dato errato..


  • User Newbie

    Ciao,
    ma ti escono risultati in più o è proprio errato il set di record risultanti?

    Prova a mettere una condizione is null sulla tabella report.


  • User

    ciao H4MM3R,
    grazie per avermi risposto..
    In pratica il risultato è semrpe errato... o mi da 0 oppure un risultato sempre errato ...


  • Moderatore

    @deejayp said:

    Innanzitutto vi dico che questo problema riguarda 2 tabelle presente in un DB MYSQL

    • TBL_Report, composta da:
      Id
      IdNews
      IdIscritto

    • TBL_Iscritti, composta da:
      Id
      IdAdmin
      Abilitato [tipo campo INT -con valori possibili 0/1]
      Richiesta Cancellazione [tipo campo DATE]

    Adesso, il problema è questo, dovrei "prelevare" tutti gli iscritti inseriti nella TBL_ISCRITTI che non siano presenti nella TBL_REPORT che fanno parte di un determinato IDADmin, che abbiano nel campo Abilitato lo 0, che non abbiano richiesto la cancellazione (quindi che il campo sia vuoto) e che non abbiano abbinato una IDNews che ho richiesto per il controllo.

    Ciao,
    non si tratta di Join ma di selezione per differenza tra insiemi, prova con questa query andando a specificare un IdAdmin di prova (al posto di [param_ID_Admin]).

    
    Select * 
            from TBL_ISCRITTI 
    where 
            TBL_ISCRITTI.id NOT IN (SELECT distinct  idiscritto from TBL_Report) 
    AND
            idAdmin = [param_ID_Admin]
    And
            abilitato=0
    And
          TBL_ISCRITTI.[Richiesta Cancellazione] is NULL 
    
    

    PS: In generale ti consiglio di non usare nomi di campi o tabelle conteneti più parole separate da spazi, al limite separali con un underscore ("_").
    L'introduzione di spazi può generare errori SQL se non opportunamente formattati con apici particolari e/o parentesi.

    Saluti


  • User

    ciao,
    innanzitutto ti ringrazio per il tuo suggerimento...ma avevo già risolto, utilizzando proprio la tua soluzione..
    qui di seguito, ti riporto ciò che ho fatto:

    Select * FROM TBL_ISCRITTI WHERE IdAdmin = 3 AND (IsNull(Richiesta_Cancellazione) Or Richiesta_Cancellazione = '//' Or Richiesta_Cancellazione = '') And Abilitato = 0 AND Id not in (SELECT IdIscritto FROM Tbl_Report WHERE IdNews = 23) ORDER BY Richiesta_Cancellazione, Cognome

    per quanto risgurda il suggerimento sul come nominare i campi e le tabelle...quello già lo faccio 😉

    grazie cmq a tutti voi..