-1
votes

Comment rejoindre deux tables sans répéter les mêmes lignes pour différentes valeurs dans le tableau

première table: xxx

deuxième table: xxx

résultat attendu: xxx


2 commentaires

J'ai enlevé toutes ces étiquettes de SGBD en conflit. Pouvez-vous en remettre l'un d'entre eux, celui des SGBD en fait utilisé.


C'est quelque chose que je ferais dans une présentation, une couche ci-dessus.


3 Réponses :


0
votes

Si vous utilisez SQL Server code>, vous pouvez essayer comme suit. XXX PRE>

Démo en ligne strong> p>

Sortie forte> p>

SELECT c.id AS country_id, 
       c.country, 
       t.user 
FROM   (SELECT s.country_id, 
               s.user, 
               s.id,
               CASE 
                 WHEN (SELECT Min(id) 
                       FROM   second s2 
                       WHERE  s2.country_id = s.country_id) = s.id THEN 1 
                 ELSE 0 
               END rn 
        FROM   second s) t 
       LEFT JOIN country c 
              ON t.country_id = c.id 
                 AND t.rn = 1 
ORDER  BY t.country_id ,t.id


0 commentaires

1
votes

Ici, vous pouvez utiliser des méthodes d'agrégation de MySQL et PostgreSQL Group_ConCAT et StringGreSQL (StringGreSQL Group_ConCAT et String_Agg (Certains_Column, ',') Méthodes de joindre des noms avec des virgules et obtenir 1 enregistrement pour chaque pays en conséquence.

pour mysql xxx

pour postgreSQL xxx

il produira des résultats similaires à xxx


2 commentaires

Une bonne idée. Ce serait vraiment ma façon préférée de le faire dans SQL. Si des lignes séparées sont souhaitées comme indiqué dans la demande, je vous soucies de cette disposition sur mon application ou site Web, pas dans SQL.


Merci, j'ai utilisé Listagg à DB2



1
votes

Utiliser retard code> pour voir si la ligne précédente contient le même pays.

select
  case when lag(c.id) over (order by c.id, u.user) = c.id then null else c.id end
    as country_id,
  case when lag(c.id) over (order by c.id, u.user) = c.id then null else c.country end
    as country,
  u.user
from countries c
join users u on u.country_id = c.id
order by c.id, u.user;


0 commentaires