Transformer datatables SQL séparées par une virgule en instructions SQL "in"

Première déclaration:

Select GroupMember FROM Group 

Résultat: Los Angeles, San Diego (c'est une string de caractères)

Deuxième déclaration

  SELECT * FROM Store_Information WHERE Store_Name IN ('Los Angeles', 'San Diego'); 

Comment transformer Los Angeles, San Diego (une donnée) en IN ('Los Angeles', 'San Diego')?

Utiliser la requête interne

 SELECT * FROM Store_Information WHERE Store_Name IN (Select GroupMember FROM Group) 

vous pouvez écrire une requête en tant que

 SELECT * FROM Store_Information WHERE Store_Name IN ( SELECT Split.a.value('.', 'VARCHAR(100)') AS Ssortingng FROM (SELECT CAST ('<M>' + REPLACE(groupname, ',', '</M><M>') + '</M>' AS XML) AS groupname FROM Group) AS A CROSS APPLY groupname.nodes ('/M') AS Split(a)) 

Bien que vous puissiez le faire avec une sous-requête, un meilleur moyen est avec une jointure:

 SELECT s.* FROM Store_Information s JOIN Group g ON g.GroupMember = s.Store_Name 

Regardez comme le

 Select GroupMember FROM Group 

seulement returnner 1 ligne qui est Los Angeles, San Diego

Donc vous pouvez utiliser ça

 SELECT * FROM Store_Information WHERE Store_Name IN (Select ''' + REPLACE(GroupMember,',',''',''') + ''' FROM Group) 
  1. append 'devant Los
  2. replace, -> ','
  3. append 'à la fin de Diego