Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Join fra più tabelle

  1. #1

    Join fra più tabelle

    Buon giorno, vorrei sapere come mai questa query che eseguo mi estrapola solo un record..
    codice:
    SELECT t3.Nome, t3.Cognome,t1.Nome,t1.PG
    FROM TBSEQ_copy t1 JOIN (TBSEGNALA_copy t2 JOIN TBESTERNI_copy t3 ON t2.nUser=t3.IdUser) 
    ON t1.Nome = CONCAT(t3.Cognome,t3.Nome)
    Praticamente:
    - eseguo la prima join fra parentesi, tra la TBSEGNALA_copy e TBESTERNI_copy per estrapolare nome e cognome
    - dopodichè, con il risultato ottenuto eseguo l'altra join con TBSEQ_copy per estrapolare il PG associato ad ogni nome..

    Purtroppo non capisco come mai, mi estrapola un solo nome e cognome associato al valore PG.
    E pure le tabelle hanno svariati migliaia di record....

    Grazie mille.....

  2. #2
    forse questa istruzione

    CONCAT(t3.Cognome,t3.Nome)

    ti riporta 'RossiMario' invece di 'Rossi Mario'

  3. #3
    quindi facendo in questo modo:
    codice:
    SELECT distinct(t1.Nome),t1.PG
    FROM TBSEQ_copy t1 JOIN (TBSEGNALA_copy t2 JOIN TBESTERNI_copy t3 ON t2.nUser=t3.IdUser) 
    ON t1.Nome = CONCAT(t3.Cognome," ",t3.Nome)
    Risolvo?
    cioè, ho provato cosi e adesso mi tira fuori sui 600 record....
    Però ti chiedo, questa è la maniera più sicura per estrarre dal DB Nome e PG?
    Oppure può darsi che non sia affidabile?
    Scusami se ti faccio questa domanda, ma l'inesperienza mi porta ad avere dei dubbi.
    Grazie mille....
    Molto gentile

  4. #4
    risolvi? non lo so prova

    è il metodo migliore? se l'unica corrispondenza che hai è quella, non ci sono alternative. piuttosto, la JOIN può fallire se in t1.nome i dati sono registrati così

    codice:
    Rossi  Mario <---- 2 spazi tra Rossi e Mario
    Rossi, Mario
    Mario Rossi
    e quindi sono *diversi* da "Rossi Mario", derivato da CONCAT(t3.Cognome," ",t3.Nome)

  5. #5
    Grazie mille...effettivamente era per quello.
    Ora questa join mi serve per estrapolare i dati di PG ed aggiungerli ad un'altra tabella.

    Purtroppo come l'ho strutturata, ha un problema, popola il campo PG, ma aggiunge altri 750 record, praticamente da 1600 record che avevo sono diventati 2300..perchè invece di inserirli nei campi già esistenti, ne ha creati altri 750.
    Questa è la query:
    codice:
    INSERT INTO TBSEGNALA_01042010 (PG)
    SELECT t1.PG
    FROM TBSEQ_copy t1 JOIN TBESTERNI_copy t3 
    ON t1.PG=t3.Punteggio
    Dovrei fare un'UPDATE invece che l'INSERT?
    Ho provato cosi...ma non và...mi restituisce questo messaggio:
    "Subquery returns more than 1 row"
    codice:
    update TBSEGNALA_01042010  
    set PG = (SELECT t1.PG
    FROM TBSEQ_copy t1 JOIN TBESTERNI_copy t3 
    ON t1.PG=t3.Punteggio)
    grazie ancora

  6. #6
    non ho ben capito il problema. posta anche la struttura delle due tabelle e un esempio pratico

  7. #7
    Ciao,

    come da regolamento, va inserito il titolo della piattaforma del database nel titolo ... tu però non lo hai inserito nemmeno nel thread.

    Gentilmente posta il nome della piattaforma del database altrimenti sarò costretto a chiudere il thread.

    Grazie
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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 © 2025 vBulletin Solutions, Inc. All rights reserved.