Query escludente

di il
17 risposte

Query escludente

Miei cari, mi trovo di fronte ad un problema per me nuovo e mi piacerebbe sapere dagli esperti in che modo approcciarlo adeguatamente.
Ho una tabella che contiene due campi (per semplicità)
1 tessera
2 contatto

ogni tesserato può essere presente più volte perché avrà almeno una mail e più numeri telefonici.
Può capitare però di avere anche tesserati che non hanno una mail, ma solo numeri telefonici.

Dopo aver inviato una mail a tutti quelli che ne posseggono una, (e questo lo faccio facilmente), ho bisogno di telefonare a tutti gli altri che non hanno sicuramente una mail.
Secondo una buona logica, come mi conviene procedere?

grazie antonio cuomo

17 Risposte

  • Re: Query escludente

    Non si capisce se non sai fare la query, oppure se non sai come procedere per le telefonate...
  • Re: Query escludente

    Secondo me ci sono 2 possibilità.
    1) All'antica. Prevedi più campi dedicati ai contatti, ossia Telefono, Cellulare, e-mail...
    2) Moderno. Siccome ogni individuo può possedere molti pù contatti di quelli classici/storici (del secolo scorso dove ci si limitava appena a Telefono e forse Cellulare), io prevederei una tabella Contatti dal lato molti con i campi:
    TipoContatto (es. Telefono, Cellulare, e-mail, Skype, AIM...)
    Contatto
    IDPersona (numerico dal lato molti)

    Poi ti regoli di conseguenza per la query.
  • Re: Query escludente

    Rispondendo ad Osvaldo che saluto caramente, dico che la mia tabella è già molto utilizzata nel processo così com'è ora e non intendo apportare modifiche alla struttura. Dovrei intervenire poi su troppe parti del sw che la usano.

    Per gibra faccio un veloce riepilogo.
    Quando invio informazioni via e-mail a tutti gli utenti della tabella, devo poi contattare telefonicamente tutti quelli che la mail non ce l'hanno.
    Ma solo quelli che non ce l'hanno. Per cui una banale query che estrae i nr. di telefono mi porterebbe ad informare anche quelli a cui ho inviato una mail (cosa che vorrei evitare).
    La mia domanda è questa:
    come faccio ad oscurare dalla tabella tutti i record (di mail o di telefono) di tesserati che hanno una mail ?
    Tieni presente che sia la mail che il numero di telefono si trovano nello stesso campo <contatto> lungo 35 caratteri ma di differenti record che hanno in comune solo il numero di <tessera>.
    E' tutto. Puoi aiutarmi?
    ciao antonio cuomo
  • Re: Query escludente

    Non ho capito un granchè. Intendi che le due tabelle sono relazionate da una FK? allora
    
    select boh from tessera t left join contatto c on t.qualcosa = c.qualcosa where c.qualcosa is null
    
  • Re: Query escludente

    Nella query devi semplicemente indicare la condizione (WHERE) che serve a te.
    Potrebbe essere più o meno:
    SELECT tessera, contatto FROM tabella
    WHERE IsNumeric(contattto)
    ma dipende cosa contiene nel campo Contatto...
  • Re: Query escludente

    gibra ha scritto:


    Nella query devi semplicemente indicare la condizione (WHERE) che setve a te.
    Potrebbe essere più o meno:
    SELECT tessera, contatto FROM tabella
    WHERE IsNumeric(contattto)
    ma dipende cosa c'è nel campo Contatto...
    ?
  • Re: Query escludente

    +m+ ha scritto:


    ?
    Scusami, ma ancora non ho la lauera da Indovino...
  • Re: Query escludente

    gibra ha scritto:


    +m+ ha scritto:


    ?
    Scusami, ma ancora non ho la lauera da Indovino...
    neppure io, ma senza join... almeno Otelmaticamente suppongo che una qualche chiave ci sia... potresti però aver ragione, non è da escludere a priori.

    EDIT: sono un idiota, non avevo letto bene che si tratta di una singola tabella con due campi, e non due tabelle.
    Vabbè l'età avanza...
  • Re: Query escludente

    Bene tornando alla domanda, ipotizzando che le email contengano il carattere @ (almeno uno), mi limiterei a fare qualcosa del tipo "seleziona tutto quello che non contiene un @"
  • Re: Query escludente

    antocuomo ha scritto:


    Quando invio informazioni via e-mail a tutti gli utenti della tabella, devo poi contattare telefonicamente tutti quelli che la mail non ce l'hanno.
    Ma solo quelli che non ce l'hanno. Per cui una banale query che estrae i nr. di telefono mi porterebbe ad informare anche quelli a cui ho inviato una mail (cosa che vorrei evitare).
    Tieni presente che sia la mail che il numero di telefono si trovano nello stesso campo <contatto> lungo 35 caratteri ma di differenti record che hanno in comune solo il numero di <tessera>.
    Forse la risposta letterale è qui

    +m+ ha scritto:


    ipotizzando che le email contengano il carattere @ (almeno uno), mi limiterei a fare qualcosa del tipo "seleziona tutto quello che non contiene un @"
    ma non pensi (antocuomo) che non sia una buona gestione di quel campo che accoglie 2 informazioni ben distinte?
  • Re: Query escludente

    OsvaldoLaviosa ha scritto:


    ma non pensi (antocuomo) che non sia una buona gestione di quel campo che accoglie 2 informazioni ben distinte?
    Al contrario, è proprio così che si deve fare (e qualsiasi altro modo è sbagliato).
    Solo in questo modo si ha la possibilità di gestire innumerevoli 'tipologie di contatto' per lo stesso soggetto.

    Non puoi determinare a priori quanti telefoni, quante email, indirizzi, ecc. ha una persona, o azienda.
  • Re: Query escludente

    Miei cari, mi rendo conto di non essere stato sufficientemente chiaro: ci riprovo.

    ID a parte, ho una tabella così popolata:

    TESSERA ------CONTATTO
    1-------402230
    1-------401090


    2-------402020
    3-------4444444
    4-------4544444

    Il mio obiettivo è semplicemente quello di estrarre solo e solamente gli ultimi due "tesserati" (il 3 e il 4 per intenderci) a cui dovrò necessariamente telefonare mentre ai primi avrò inviato sicuramente solo una mail.

    Il problema non sta nell'individuare semplicemente la "@" ma nel filtrare anche i record parenti dei due tesserati con la "@" per poterli eliminare dalla mia lista finale.

    ciao antonio cuomo
  • Re: Query escludente

    +m+ ha scritto:


    EDIT: sono un idiota, non avevo letto bene che si tratta di una singola tabella con due campi, e non due tabelle.
    Vabbè l'età avanza...
    Capita anche a me...
  • Re: Query escludente

    Io provo a ragionare per piccoli passi.
    1. Query di selezione (che include il campo Tessera) che filtra tutti quelli che hanno l'e-mail (quindi un filtro sul carattere @): Query1
    2. Query di ricerca dati non corrispondenti (esiste la procedura guidata) tra TuaTabella e Query1 sfruttando il campo Tessera: Query2

    Query2 ti restituira tutte le tessere che non hanno e-mail.
Devi accedere o registrarti per scrivere nel forum
17 risposte