J'ai 2 tables très simples à joindre mais il me manque un endroit où je n'obtiens pas le résultat souhaité:
Table # 1:
Tableau n ° 2:
Résultat souhaité:
Query:
create table #temp1 ( client_id int, identifier int, pp_id int, ch_id int, code varchar(20), program varchar(20), startdate date, enddate date, ssc varchar(50) ) insert into #temp1 values (9908,789654123,1567,1566,'OP','xASMT','1/1/2019','1/4/2019','A201901044F010134NNN01D 151 143 093 ') create table #temp2 ( client_id int, identifier int, pp_id int, ch_id int, code varchar(20), program varchar(20), startdate date, enddate date, ssc varchar(20) ) insert into #temp2 values(9908,789654123,1574,1573,'OP','SU1','1/1/2019','1/4/2019',NULL) --My query: select t1.client_id, t1.identifier, concat(t1.code, t1.startdate, t1.enddate, t1.ssc), concat(t2.code, t2.startdate, t2.enddate, t2.ssc) from #temp1 t1 left join #temp2 t2 on t1.client_id = t2.client_id and t1.identifier = t2.identifier
Je suis toujours un apprenant et pardonnez-moi s'il y a des erreurs ici. Avez-vous de l'aide?!
5 Réponses :
Je ne pense pas que vous ayez besoin d'une jointure, mais vous avez besoin d'union:
select t1.client_id, t1.identifier, CONCAT(t1.code,t1.startdate,t1.enddate,t1.ssc) from #temp1 t1 union all select t2.client_id, t2.identifier, CONCAT(t2.code,t2.startdate,t2.enddate,t2.ssc) from #temp2 t2
peut-être avez-vous besoin d'une partie where
pour restreindre le résultat pour certaines lignes.
Voir la démo
Ce que vous semblez rechercher est une construction de sélection UNION
, pas une jointure.
UNION renvoie les lignes d'une sous-requête et ajoute les lignes d'une autre sous-requête
Donc avec votre exemple
select t1.client_id, t1.identifier, CONCAT(t1.code,t1.startdate,t1.enddate,t1.ssc from #temp1 t1 where ... some condition ... union all select t2.client_id, t2.identifier, concat(t2.code,t2.startdate,t2.enddate,t2.ssc) from #temp2 t2 where ... some condition ...
Voir la documentation ici: UNION
En ce qui concerne le résultat souhaité, je comprends que vous devez utiliser UNION ALL au lieu de joindre les tables.
Veuillez vérifier le script:
SELECT t1.client_id ,t1.identifier ,CONCAT(t1.code, t1.startdate, t1.enddate, t1.ssc) --,CONCAT(t2.code, t2.startdate, t2.enddate, t2.ssc) FROM #temp1 t1 UNION ALL SELECT t2.client_id ,T2.identifier ,CONCAT(t2.code, t2.startdate, t2.enddate, t2.ssc) FROM #temp2 t2
Voici ce que j'utiliserais pour obtenir cette sortie:
select t1.client_id, t1.identifier, CONCAT(t1.code,t1.startdate,t1.enddate,t1.ssc) ssc_concatenated --concat(t2.code,t2.startdate,t2.enddate,t2.ssc) from #temp1 t1 union all select t2.client_id, t2.identifier, concat(t2.code,t2.startdate,t2.enddate,t2.ssc) ssc_concatenated from #temp2 t2
Voici le db fiddle démo
Voici ce que vous NE FEREZ PAS, simplement publier parce que vous avez posé des questions sur JOIN. C'est certainement la mauvaise façon de procéder, mais:
acol bcol COALESCE(acol, bcol) result ----|-----|--------------------|-------- A1 null COALESCE(A1, null) -> A1 null B2 COALESCE(null, B1) -> B1
Une jointure externe complète entre ces tables dans une condition impossible signifie que vous vous retrouvez avec un ensemble de résultats comme:
A OUTER JOIN B ON 1 = 0 Results: A1 null A2 null null B1 null B2
Quel est le problème, qu'est-ce que vous obtenez qui est le problème?
REMARQUE: si des valeurs sont nulles et que vous créez une chaîne, la chaîne entière sera nulle
Ma requête ne me donne pas le résultat souhaité. J'ai besoin de 2 lignes d'enregistrements
Je concatène uniquement les dates et le SSC. Si quelque chose est nul, il sera signalé comme nul
Une jointure tentera de rejoindre les enregistrements et vous en donnera un pour chaque correspondance unique. Avez-vous besoin de faire une UNION à la place?
Ce n'est pas un JOIN, c'est une UNION.
Ouais. Juste figuré, UNION est utile. Existe-t-il un autre moyen d'accomplir cela avec JOIN?
@brad pas avec CONCAT, seulement avec +
@rick UNION fait croître les jeux de résultats verticalement, JOIN les fait croître horizontalement. Vous avez spécifiquement indiqué que vous souhaitiez une croissance verticale; pourquoi demandez-vous JOIN?
@caius merci. J'ai compris maintenant!
Je veux dire, vous POUVEZ le faire avec JOIN; Je publierai un exemple pour vous si vous voulez vraiment, vraiment ...