2017-07-17 1 views
0

Comment puis-je convertir une sous-requête SQL pour Jointures:Comment convertir sous-requête SQL pour Rejoint

SELECT [COUNTRY] FROM [CountryMappingDB].[dbo].[DNB_Country_mapping_poc.ss] 
WHERE [COUNTRY] NOT IN 
(SELECT [EntityAttributeValue] FROM [CountryMappingDB].[dbo].[DNB_MappingData.ss] 
UNION ALL 
SELECT [SalesCountryName] FROM [CountryMappingDB].[dbo].[DNB_Country_mapping_poc_dimSalesCountry.ss]); 
+1

Pourquoi avez-vous ressenti le besoin de faire cela? –

+2

Duplication possible de [Comment convertir une sous-requête SQL en une jointure] (https://stackoverflow.com/questions/600943/how-to-convert-a-sql-sublery-to-a-join) – demo

+0

theres rien de mal avec des sous-requêtes – WhatsThePoint

Répondre

1

Je pense que la meilleure façon d'écrire la requête est:

SELECT [COUNTRY] 
FROM [CountryMappingDB].[dbo].[DNB_Country_mapping_poc.ss] ss 
WHERE NOT EXISTS (SELECT 1 
        FROM [CountryMappingDB].[dbo].[DNB_MappingData.ss] ss2 
        WHERE ss2.County = ss.Country 
       ) AND 
     NOT EXISTS (SELECT 1 
        FROM [CountryMappingDB].[dbo].[DNB_Country_mapping_poc_dimSalesCountry.ss] ss3 
        WHERE ss3.SalesCountryName = ss.Country 
       ); 

Bien que vous pouvez écrire le requête en utilisant JOIN s, je pense que cela est plus facilement compris et il fonctionnera comme prévu lorsque les tables de comparaison ont NULL valeurs.

0

Essayez ceci;

SELECT [COUNTRY] FROM [CountryMappingDB].[dbo].[DNB_Country_mapping_poc.ss] 
left join 
    (SELECT MyData=[EntityAttributeValue] FROM [CountryMappingDB].[dbo].[DNB_MappingData.ss] 
    UNION ALL 
    SELECT MyData=[SalesCountryName] FROM [CountryMappingDB].[dbo].[DNB_Country_mapping_poc_dimSalesCountry.ss] 
    ) countries on [COUNTRY]=countries.MyData 
WHERE countries.MyData is null