J'essaie de joindre deux tables SQL, parent (dont j'ai le contrôle de la conception complète) et child (que je ne peux pas changer). J'ai changé la table parente afin qu'elle ait une colonne varchar, contenant une liste CSV des identifiants des enregistrements enfants. Je voudrais maintenant faire une sélection retournant une rangée par parent, et quelques compteurs re. les enfants (c'est-à-dire combien d'enfants ont un "statut" de vrai). J'avais initialement pensé que je pouvais convertir la liste CSV en une chaîne XML, la convertir en une colonne de type Xml, et rejoindre la table enfant en utilisant les "nœuds" Xml - mais je n'arrive pas à obtenir le syntaxe juste.Jointure SQL utilisant des valeurs CSV? Utiliser Xml peut-être?
Quelqu'un peut-il suggérer comment cela pourrait être fait?
Merci, Ross
(voici ce que j'ai été à jouer avec)
declare @true bit; set @true = ~0
declare @false bit; set @false = 0
declare @parent table (id int, children varchar(max))
declare @child table (id int, status bit)
insert into @parent values (1,'1,2,3')
insert into @child values (1,@true)
insert into @child values (2,@false)
insert into @child values (3,@false)
;with parent as
(
select id as 'parentId', cast('<children><child id="' + replace (children,',','"/><child id="') + '"/></children>' as xml) as 'children' from @parent
)
select parentId, t2.child.query('.')
from parent
--join @child as child on (child.id = ??)
cross apply children.nodes('/children/child') as t2(child)
Je suis conscient que je pourrais créer une 3ème table pour faire une référence croisée entre les deux, mais j'étais plus intéressé par les techniques possibles pour faire une jointure en utilisant une liste CSV. –