Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    full join tra due tabelle raggruppando valori comuni

    Buonggiorno a tutti ,

    ho questa query:

    codice:
    SELECT  doa_righe_sparate.id,
                              `doa_righe_sparate`.`id_prodotti`,
                              prodotti.codice_ean as codice_ean_sparato,
                              0 as id_righe_inserite,
                              0 as codice_ean_inserito,
                              0 as inserito_manualmente,
                              prodotti.costo as costo_prodotto,
                              RANK() over (
                                PARTITION BY `doa_righe_sparate`.`id_prodotti`
                                ORDER BY doa_righe_sparate.id  ASC
                              ) rank_comparazione
                              
                      FROM `doa_righe_sparate`
                      JOIN prodotti on prodotti.id=doa_righe_sparate.id_prodotti
                      WHERE `doa_righe_sparate`.`id_doa` = 1
                      AND `doa_righe_sparate`.`deleted_at` IS NULL
                      
                      
                                        UNION    ALL
    
                      SELECT  0 as id,
                              `doa_righe_inserite`.`id_prodotti`,
                              0 as codice_ean_sparato,
                              `doa_righe_inserite`.`id` as id_righe_inserite,
                              prodotti.codice_ean as codice_ean_inserito,
                              `doa_righe_inserite`.inserito_manualmente,
                              prodotti.costo as costo_prodotto,
                              RANK() over (
                                PARTITION BY `doa_righe_inserite`.`id_prodotti`
                                ORDER BY doa_righe_inserite.id  ASC
                              ) rank_comparazione
                              
                      FROM `doa_righe_inserite`
                      JOIN prodotti on prodotti.id=doa_righe_inserite.id_prodotti
                      WHERE `doa_righe_inserite`.`id_doa` = 1
                      AND `doa_righe_inserite`.`deleted_at` IS NULL
    che mi restituisce 100 righe di cui 4 dalla prima select e 96 dalla seconda :

    query_ridotta.jpg

    avrei la necessita che se l'id prodotto corrisponde e il rank_comparazione corrisponde venga fatta una unica riga con il codice ean_sparato e con quello inserito

  2. #2
    incapsula le due query in una esterna e vai di GROUP BY() sui due valori che hai indicato

    guarda anche qui https://lnx.dicesare.com/sql/sql-com...-di-risultati/

  3. #3
    Eccomi :

    codice:
    SELECT 
        MAX(R.rank_comparazione) AS rank_comparazione, 
        R.id_prodotti,
        max(R.codice_ean_inserito),
        max(R.codice_ean_sparato)
    FROM(
    
    SELECT  doa_righe_sparate.id,
                              `doa_righe_sparate`.`id_prodotti`,
                              prodotti.codice_ean as codice_ean_sparato,
                              0 as id_righe_inserite,
                              0 as codice_ean_inserito,
                              0 as inserito_manualmente,
                              prodotti.costo as costo_prodotto,
                              RANK() over (
                                PARTITION BY `doa_righe_sparate`.`id_prodotti`
                                ORDER BY doa_righe_sparate.id  ASC
                              ) rank_comparazione
                              
                      FROM `doa_righe_sparate`
                      JOIN prodotti on prodotti.id=doa_righe_sparate.id_prodotti
                      WHERE `doa_righe_sparate`.`id_doa` = 1
                      AND `doa_righe_sparate`.`deleted_at` IS NULL
                      
                      
                                        UNION    ALL
    
                      SELECT  0 as id,
                              `doa_righe_inserite`.`id_prodotti`,
                              0 as codice_ean_sparato,
                              `doa_righe_inserite`.`id` as id_righe_inserite,
                              prodotti.codice_ean as codice_ean_inserito,
                              `doa_righe_inserite`.inserito_manualmente,
                              prodotti.costo as costo_prodotto,
                              RANK() over (
                                PARTITION BY `doa_righe_inserite`.`id_prodotti`
                                ORDER BY doa_righe_inserite.id  ASC
                              ) rank_comparazione
                              
                      FROM `doa_righe_inserite`
                      JOIN prodotti on prodotti.id=doa_righe_inserite.id_prodotti
                      WHERE `doa_righe_inserite`.`id_doa` = 1
                      AND `doa_righe_inserite`.`deleted_at` IS NULL
    )as R
    JOIN prodotti P on R.id_prodotti=P.id
    GROUP BY R.id_prodotti,rank_comparazione
    sembra andare

  4. #4

  5. #5
    rinnovo il tip

    invece di scrivere "SELECT tabella.campo1 FROM tabella1", usa gli alias, che è più leggibile "SELECT T1.campo1 FROM tabella1 T1"


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.