Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Query con 2 tabelle e record non presente in una

  1. #1

    Query con 2 tabelle e record non presente in una

    La seguente query
    codice:
    SELECT  TabAna.AnaID, TabAna.Cod, TabRef.AnaID, TabRef.Risultato
    FROM TabAna INNER JOIN TabRef ON TabAna.AnaID = TabRef.AnaID
    WHERE TabRef.Data=43321 AND TabRef.PazID=29483
    AND TabAna.AnaID IN (1059,274,591,45)
    restituisce
    codice:
    
    AnaID    AnaCod    AnaID    Risultato
    274      PH        274      7,0
    591      AL        591      3
    1059     URI       1059
    Io vorrei viceversa che, anche se non esiste il record di TabRef con TabRef.AnaID=45, il risultato fosse il seguente :
    codice:
    AnaID    AnaCod    AnaID    Risultato
    274      PH        274      7,0
    591      AL        591      3
    1059     URI       1059
    45       AZ        45
    Parrebbe semplice, ma .... non ci riesco.
    In questo esempio TabAna ha 4 record e TabRef ne ha 3.
    Qualcuno sarebbe così gentile da aiutarmi ?
    Grazie per l'attenzione.
    Ultima modifica di giustavalla; 12-09-2018 a 11:09

  2. #2
    invece che INNER JOIN usa LEFT JOIN

  3. #3
    Grazie ma avevo già provato, anche con RIGHT JOIN, senza risultato positivo. Mi vengono restituite solo 3 righe.
    Ho anche provato con 2 SELECT annidiate; anche qui senza risultato.

  4. #4
    non è che il problema è dato dalla WHERE?

    WHERE TabRef.Data=43321 AND TabRef.PazID=29483

  5. #5
    se il problema è quello, prova a mettere tutto nella JOIN

    codice:
    SELECT  TabAna.AnaID,TabAna.Cod,TabRef.AnaID,TabRef.Risultato
    FROM TabAna LEFT JOIN TabRef ON 
    TabAna.AnaID=TabRef.AnaID AND 
    TabRef.Data=43321 AND TabRef.PazID=29483
    AND TabAna.AnaID IN (1059,274,591,45)
    

  6. #6
    Errore: Espressione JOIN non supportata.
    Sto sperimentando con MSAccess ma l'istruzione dovrà essere implementata su SQL Server (ma questa precisazione mi pare superflua).
    Edit: come già detto non esiste in TabRef un record con TabRef.Data=43321 AND TabRef.PazID=29483
    EDIT 2: Come non detto riguardo MSAcces vs SQL Server. Con SQLServer vengono fuori un mucchio di record (tanti quanti sono i record di TabAna), non solo 4.
    Ultima modifica di giustavalla; 12-09-2018 a 15:31

  7. #7
    per la precisazione: invece è fondamentale, tanto che il regolamento prevede che venga esplicitato

    per l'edit2: lo immaginavo. non conosco i tuoi dati, quello che ti posso suggerire è di rimettere la WHERE spostandoci uno a uno i parametri che adesso ho messo nella JOIN fino a quando non raggiungi il risultato voluto

  8. #8
    In un primo mento non pensavo che l'utilizzo di MSAccess o di SQLServer fosse importante; l'avevo omesso per semplicità. Poi mi è venuto il dubbio di fronte al LEFT JOIN non supportato. Scusa l'omissione.
    Da adesso in poi utilizzerò solo SSMS con SQLServer.
    I dati sono ne più ne meno quelli che ho indicato; non saprei cos'altro aggiungere. 4 record (o più) in TabAna, 3 record (o più) in TabRef. Ma solo 3 hanno TabRef.Data=43321 e TabRef.PazID=29483. L'output deve prevedere 4 record.

    In un primo momento ho proceduto ragionando (o cercando di ragionare) e poi, visto che non ottenevo il risultato desiderato, sono andato avanti a tentativi (numerosi). Non sono però ancora riuscito nel mio intento.

  9. #9
    prova con

    SELECT TabAna.AnaID,TabAna.Cod,TabRef.AnaID,TabRef.Risultato
    FROM
    TabAna LEFT JOIN TabRef ON
    TabAna.AnaID=TabRef.AnaID AND
    TabRef.Data=43321 AND TabRef.PazID=29483
    WHERE TabAna.AnaID IN (1059,274,591,45)

  10. #10
    La query restituisce dati che, in un primo momento, parevano quelli corretti. E di questo ti ringrazio.
    Tuttavia, applicata al caso concreto, ha un grave difetto che si è rivelato solo dopo, sul campo, nel mondo reale.
    C'è una difformità fra l'ordine degli ID indicato in
    TabAna.AnaID IN (1059,274,591,45)
    e la prima colonna dei record che io ho indicato con 45, 276, 591 e 1059; era solo un esempio buttato giù per illustrare il problema.
    Come si nota tali numeri sono crescenti. Penso che ciò dipenda dal fatto che TabAna.AnaID è un indice primario e SQLServer probabilmente prima riordina 1059,274,591,45 e solo dopo completa la query; ciò per velocizzare l'esecuzione della query.
    Nel codice reale è necessario che in quella prima colonna ci siano, nell'ordine, 1059,274,591,45.
    La soluzione definitiva penso che sia assai complicata per cui, a meno di colpi di genio, cercherò di risolvere il mio problema da un diverso punto di vista.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.