PDA

Visualizza la versione completa : [SQL] Eccezione fastidiosa


Strid
18-05-2004, 18:14
Salve a tutti. Vi propongo un problema che m'è apparso recentemente e dal quale non riesco a cavarmi fuori.
Ho un discreto database interno in mysql che viene utilizzato per archiviare i dati delle aziende contattate, i referenti e i dati dei vari contatti effettuati. Mi è stato richiesto di estrarre tutte le aziende cosiddette "calde", ovvero quelle che si sono dimostrate interessate ad un possibile incontro. Le tabelle prinicipali son tre: azienda, contatto e persona, legate tra di loro tramite l'id_azienda (azienda - contatto e azienda-persona) e id_persona (persona-contatto).
Tra i vari campi della tabella contatto, quelli che m'interessano sono:
tipocontatto = 3
interessato = 3
appuntamento = 0
data appuntamento = ' ' oppure = '00/00/000'

mentre della tabella persona m'interessa solamente questo:
appuntamento_il = ' ' oppure = '00/00/0000'

La query che utilizzo per estrarre le aziende "calde" è la seguente:

SELECT * FROM azienda
INNER JOIN contatto, persona
ON contatto.id_azienda = azienda.id_azienda
AND persona.id_azienda = azienda.id_azienda
WHERE tipocontatto = 3 AND interessato = 3
AND appuntamento = 0
AND (data_appuntamento = ' OR data_appuntamento = '00/00/0000')
AND (appuntamento_il = ' OR appuntamento_il = '00/00/0000')
GROUP BY azienda ORDER BY azienda

Il problema è che mi è capitato, cosa che m'ha fatto venire il dubbio sulla validità del tutto, che un'azienda per la quale sono presenti 4 record nella tabella "contatto", dei quali 3 hanno valore contatto.appuntamento = 0 e uno solo contatto.appuntamento = 1, venga estratta lo stesso. Il mio dubbio è che per come la query è stata strutturata, il mio recordset vada a verificare solo uno dei 4 record (magari il primo), e consideri valide le condizioni. E' possibile questo? E se si, cosa sbaglio?
Confido nel vostro utile aiuto che s'è rivelato sempre importante e vi saluto :ciauz:

AlbertoPicca
18-05-2004, 19:18
La query mi sembra strutturata discretamente e il risultato dell'interrogazione non costa di un solo record ma di n-tuple, solo quelle che soddisfano le condizioni da te richieste.

Nel caso tu voglia solo visualizzare il primo record puoi usare la clausola LIMIT 1 al termine del comando.


Consiglio: al posto di

(data_appuntamento = ' OR data_appuntamento = '00/00/0000') ,
usa la sintassi:

(data_appuntamento is null OR data_appuntamento = '00/00/0000')

:ciauz:

Strid
24-05-2004, 13:34
Grazie della risposta Alberto, ma il problema non è che voglio visualizzare solo il primo record, ma bensì che temo che per qualche motivo (magari inesperienza mia nello strutturare la query), non prenda in considerazione tutti i record estrapolati dalla tabella correlata (nello specifico, la tabella "contatto" correlata alla tabella "azienda" tramite la FK id_azienda), ma nbensì solo il primo... Altrimenti non mi spiegherei che per questa azienda XXX nella tabella contatti risultano 4 contatti, dei quali uno SICURAMENTE non soddisfa i miei criteri di ricerca, ma viene estrapolata lo stesso... :bhò:

Una nota: ho provato ad inserire nelle condizioni dell' INNER JOIN la condizione appuntamento = 0. Facendo così, l'azienda incriminata non viene estrapolata, ma non sono sicuro se sia il metodo giusto, visto che avevo letto nella reference di mySQL che questo tipo di condizioni non devono essere specificate nei criteri dell' INNER JOIN... :dhò:

Loading