Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [MySQL] Comparare due CURSOR

    ciao!

    avrei la necessità di comparare i records di due tabelle, che non hanno lo stesso nome di colonna.
    avevo pensati creare un stored procedure impostando due CURSOR e paragonarli:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS check_fidelity_qps //
    CREATE PROCEDURE check_fidelity_qps()
        NO SQL
    BEGIN
        DECLARE done INT DEFAULT 0;
    
        DECLARE cur1 CURSOR FOR
            SELECT CONCAT(
                       TRIM(fi.cli), '-', LOWER(TRIM(fi.nome)), '-', LOWER(TRIM(fi.cognome)),
                       '-', LOWER(TRIM(fi.indirizzo))
                       ) AS valore
            FROM fidelityanagra AS fi
            WHERE LOWER(SUBSTR(fi.cognome, 1, 1)) = 'a'
              AND fi.ultmov > '2021-08-31'
              AND fi.nome IS NOT NULL
              AND TRIM(fi.nome) != ''
              AND fi.nome != '0'
              AND fi.cognome IS NOT NULL
              AND TRIM(fi.cognome) != '';
    
        DECLARE cur2 CURSOR FOR
            SELECT CONCAT(
                       TRIM(fd.f_numero), '-', TRIM(LOWER(cl.cl_nome)), '-', TRIM(LOWER(cl.cl_cognome)),
                       '-', TRIM(LOWER(cl.cl_indirizzo))
                       ) AS valore
            FROM clienti AS cl
                     INNER JOIN fidelity AS fd ON fd.f_utente = cl.cl_id
            WHERE LOWER(SUBSTR(cl.cl_cognome, 1, 1)) = 'a';
    
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    
    END
    ma mi sono arenato qui.
    sarebbe possibile fare una cosa del genere?

    oppure si accettano suggerimenti ovviamente.
    in sostanza devo paragonare i risultati di queste due query, e trovare i valori differenti.

  2. #2
    le tabelle hanno un campo chiave?

  3. #3
    Quote Originariamente inviata da optime Visualizza il messaggio
    le tabelle hanno un campo chiave?

    se intendi un campo chiave in comune, allora NI.
    nel senso che il campo cli del cur1 corrisponde al campo f_numero di cur2.

    solo che cli sta nella stessa tabella di cognome,nome e indirizzo
    mentre f_numero sta in'altra tabella in join

    il problema è che in fase di importazione da una tabella da un'altra, vista la diversa struttura che hanno, alcune fidelity sono finite su clienti errati.
    quindi vorrei capire queli fidelity hanno un diverso utente.
    e per farlo dovrei comparare fidelity+cognome+nome+indirizzo.

  4. #4
    quindi il campo che fa da pivot è fidelity? sta in entrambe le tabelle?

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    quindi il campo che fa da pivot è fidelity? sta in entrambe le tabelle?

    ciao!

    si esatto.
    in pratica devo controllare che la fidelity sia associata allo stesso nome+cognome+indirizzo in entrambe le tabelle!

  6. #6
    prova a fare un'estrazione di due campi: quello chiave è fidelity, l'altro è la concatenazione di nome+cognome+indirizzo

    se l'analisi la fai off-line, puoi pensare di mettere le due estrazioni in UNION e poi ti guardi l'output con Excel

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    prova a fare un'estrazione di due campi: quello chiave è fidelity, l'altro è la concatenazione di nome+cognome+indirizzo

    se l'analisi la fai off-line, puoi pensare di mettere le due estrazioni in UNION e poi ti guardi l'output con Excel
    ciao!

    non avevo pensato ad excel in effetti.

    ho fatto questa estrazione:
    codice:
    SELECT cli                                                                               AS fidelity,
           CONCAT(LOWER(TRIM(nome)), '-', LOWER(TRIM(cognome)), '-', LOWER(TRIM(indirizzo))) AS cliente
    FROM fidelityanagra
    WHERE LOWER(SUBSTR(cognome, 1, 1)) = 'a'
    AND ultmov > '2021-08-31'
    AND nome IS NOT NULL
      AND TRIM(nome) != ''
    AND nome != '0'
    AND cognome IS NOT NULL
      AND TRIM(cognome) != ''
    UNION ALL
    SELECT f_numero                                                                                   AS fidelity,
           CONCAT(LOWER(TRIM(cl_nome)), '-', LOWER(TRIM(cl_cognome)), '-', LOWER(TRIM(cl_indirizzo))) AS cliente
    FROM clienti
    INNER JOIN fidelity ON f_utente = cl_id
    WHERE LOWER(SUBSTR(cl_cognome, 1, 1)) = 'a';
    la butto su excel, faccio una analisi con la pivot e vedo che esce fuori!
    ti faccio sapere!

  8. #8

  9. #9
    ho fatto una modifica alla query per capire i dati da quale tabella li sto "vedendo":

    codice:
    SELECT cli                                                                               AS fidelity,
           CONCAT(LOWER(TRIM(nome)), '-', LOWER(TRIM(cognome)), '-', LOWER(TRIM(indirizzo))) AS cliente,
           'TBL 1' tbl
    FROM fidelityanagra
    WHERE LOWER(SUBSTR(cognome, 1, 1)) = 'a'
    AND ultmov > '2021-08-31'
    AND nome IS NOT NULL
      AND TRIM(nome) != ''
    AND nome != '0'
    AND cognome IS NOT NULL
      AND TRIM(cognome) != ''
    UNION ALL
    SELECT f_numero                                                                                   AS fidelity,
           CONCAT(LOWER(TRIM(cl_nome)), '-', LOWER(TRIM(cl_cognome)), '-', LOWER(TRIM(cl_indirizzo))) AS cliente,
           'TBL 2' tbl
    FROM clienti
    INNER JOIN fidelity ON f_utente = cl_id
    WHERE LOWER(SUBSTR(cl_cognome, 1, 1)) = 'a';
    però sinceramente mi manca un pezzo.
    adesso ho i dati in excel.
    li ho ordinato per fidelity.
    anche facendo una pivot, come faccio a vedere se qualche fidelity ha due recod con cli diversi?

  10. #10
    ah, pensavo fossi un mago di Excel

    fatti allora ispirare da questo
    codice:
    SELECT 	T1.*, T2.*
    FROM 
    	(SELECT 't1' as src, cli, concat(nome,cognome) as name FROM Table1) AS T1
    	LEFT JOIN
    	(SELECT 't2' as src, cli, concat(nome,cognome) as name FROM Table2) AS T2
    	ON T1.cli=T2.cli AND T1.name=T2.name
    WHERE 
    	T2.src IS NULL
    ;
    
    
    SELECT 
    	T2.*, T1.*
    FROM 
    	(SELECT 't2' as src, cli, concat(nome,cognome) as name FROM Table2) AS T2
    	LEFT JOIN
    	(SELECT 't1' as src, cli, concat(nome,cognome) as name FROM Table1) AS T1
    	ON T2.cli=T1.cli AND T2.name=T1.name
    WHERE 
    	T1.src IS NULL
    lo puoi testare qui https://www.db-fiddle.com/f/rbQvMuyGtpE7qV7rH1oZDY/2

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.