+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Informazione full join

  1. #1
    Nedved9 non  in linea Scolaretto
    Buongiorno, io devo fare una query select ad un database(PostgreSql nel mio caso). Dal momento che ho due tabelle "patient_mapping" e "patient_mapping_test" e devo fare una full join finalizzata a verificare che un certo paziente non sia presente n nell'una n nell'altra tabella, ha pi senso fare una full join sola od unire i risultati con una union? perch ho notato che con le singole full join mi vengono restituiti in output risultati diversi a seconda dell'ordine con cui gliele passo alla full join.

    AD esempio con questo ordine di tabelle passate ottengo un risultato
    (select  coalesce (pm.patient_num,pmt.patient_num) as patient_num,
    coalesce (pm.patient_ide_source ,pmt.patient_ide_source) as patient_ide_source
    from patient_mapping pm full join patient_mapping_test pmt 
    on pm.patient_ide = pmt.patient_ide 
    where pm.patient_ide ='PAT004')
    

    mentre con l'ordine invertito ottengo un altro output:
    (select  coalesce (pmt.patient_num,pm.patient_num) as patient_num,
    coalesce (pmt.patient_ide_source ,pm.patient_ide_source) as patient_ide_source
    from patient_mapping_test pmt full join patient_mapping pm
    on pmt.patient_ide = pm.patient_ide 
    where pmt.patient_ide ='PAT004');
    
    E io stavo pensando,dato che devo verificare se il record non sia presente n nell'una n nell'altra tabella, non sia pi corretto fare cosi:
    (select  coalesce (pm.patient_num,pmt.patient_num) as patient_num,
    coalesce (pm.patient_ide_source ,pmt.patient_ide_source) as patient_ide_source
    from patient_mapping pm full join patient_mapping_test pmt 
    on pm.patient_ide = pmt.patient_ide 
    where pm.patient_ide ='PAT004')
    union 
    (select  coalesce (pmt.patient_num,pm.patient_num) as patient_num,
    coalesce (pmt.patient_ide_source ,pm.patient_ide_source) as patient_ide_source
    from patient_mapping_test pmt full join patient_mapping pm
    on pmt.patient_ide = pm.patient_ide 
    where pmt.patient_ide ='PAT004');
    
    In modo da prendere tutte le corrispondenze?

    Qualcuno sa dirmi quale tra esse sia la soluzione pi corretta ? Grazie
    Ultima modifica di Nedved9; 27-02-2021 11:57 

  2. #2
    Ferrari_and non  in linea Scolaretto
    Se ti serve sapere che non sia presente in nessuna delle 2 tabelle prendi la prima Query e nel where metti in Or la ricerca su patient_id nelle 2 tabelle pm.patient_ide ='PAT004' or pmt.patient_ide ='PAT004'

  3. #3
    Nedved9 non  in linea Scolaretto
    Quote Originariamente inviato da Ferrari_and Visualizza il messaggio
    Se ti serve sapere che non sia presente in nessuna delle 2 tabelle prendi la prima Query e nel where metti in Or la ricerca su patient_id nelle 2 tabelle pm.patient_ide ='PAT004' or pmt.patient_ide ='PAT004'
    per nel tuo caso,se ho un paziente presente ad esempio in entrambe le tabelle, con un "source" diverso, se lancio la query me lo trova in una sola delle due, cio con la tua soluzione ., supponendo che PAT004 sia presente sia nell'una sia nell'altra con patient_ide_source diverso, me lo trova solo in una delle due

  4. #4
    Nedved9 non  in linea Scolaretto
    Quote Originariamente inviato da Nedved9 Visualizza il messaggio
    per nel tuo caso,se ho un paziente presente ad esempio in entrambe le tabelle, con un "source" diverso, se lancio la query me lo trova in una sola delle due, cio con la tua soluzione ., supponendo che PAT004 sia presente sia nell'una sia nell'altra con patient_ide_source diverso, me lo trova solo in una delle due
    Cio inteso cosi :
    ho PAT004 con patient_ide_source="qrscp" nella tabella patient_mapping_test
    e PAT004 con patient_ide_source="anag" nella tabella patient_mapping
    Sulla base di quello ce mi hai suggerito il paziente mi viene trovato solo con "anag" , con la query che include l'or che mi hai suggerito... invece se faccio la union me li trovava entrambi in output...

  5. #5
    Ferrari_and non  in linea Scolaretto
    No conoscendo il database ho ceduto che avendo lo stesso nome fossero 2 id identici.
    Per il tuo dubbio sicuramente si ma allora la tua ricerca diversa dal sapere se il cliente NON presente in nessuna delle 2 tabelle. Ma sapere in quale tabella presente.

  6. #6
    Nedved9 non  in linea Scolaretto
    Quote Originariamente inviato da Ferrari_and Visualizza il messaggio
    No conoscendo il database ho ceduto che avendo lo stesso nome fossero 2 id identici.
    Per il tuo dubbio sicuramente si ma allora la tua ricerca diversa dal sapere se il cliente NON presente in nessuna delle 2 tabelle. Ma sapere in quale tabella presente.
    No allora, lo scopo verificare che non sia presente in nessuna delle due tabelle, n nell'una n nell'altra e conseguentemente verificare se invece presente nel database in queste tabelle. Per facendo un esempio banale in cui presente il paziente solo nella patient_mapping o solo nella mapping_test ho notato che con le singole query, se inverto l'ordine con cui passo le tabelle posso non trovarlo il record.
    La prima full join cerca le corrispondenza nella sua left specificata e cosi come la seconda full join isolate. quindi se ho un solo record presente in una sola delle due tabelle , a seconda dell'ordine cui passo le tabelle lo trova o meno, era questo quello che mi ha fatto riflettere.

  7. #7
    Ferrari_and non  in linea Scolaretto
    L diversit delle 2 query lo vedo solo nella funzione coalesce prova a prendere tutti e 4 i valori nella select.
    Dovresti avere risultati =

  8. #8
    Nedved9 non  in linea Scolaretto
    no anche nella from, nell'on e nella condizione sono diversi, tutto invertito

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Costruzione query con INNER JOIN e OUTER JOIN in Access
    Da Zio_Panzu nel forum Microsoft Access
    Risposte: 9
    Ultimo Post: 18-04-2013, 07:19
  2. [VB6] collegamenti full screen
    Da johstile nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 30-12-2010, 07:34
  3. full outer join
    Da nina nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 28-09-2007, 11:36
  4. [Teoria]Differenza tra Natural join ed equi-join
    Da newpc82 nel forum Altri Database Server
    Risposte: 2
    Ultimo Post: 29-06-2007, 01:11
  5. Full screen
    Da piratabobo nel forum Visual Basic 6
    Risposte: 8
    Ultimo Post: 06-04-2005, 08:28