- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- problema con un join con mysql
-
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..
-
-
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.
-
ciao H4MM3R,
grazie per avermi risposto..
In pratica il risultato è semrpe errato... o mi da 0 oppure un risultato sempre errato ...
-
@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
-
-
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..