Maison >base de données >tutoriel mysql >Comment effectuer une jointure interne basée sur les numéros de ligne dans SQL Server ?
Comment effectuer une jointure interne sur un numéro de ligne dans SQL Server
Dans le domaine de la programmation SQL Server, la question de savoir comment effectuer une jointure interne sur le numéro de ligne se produit souvent. Cet article explore le sujet et propose des solutions pour vous aider à atteindre les résultats souhaités.
Pour illustrer le défi, considérons deux tableaux, A et B, chacun contenant une liste de valeurs classées de haut en bas :
L'objectif est d'effectuer une jointure interne sur les deux tables, en faisant correspondre les lignes en fonction de leurs numéros de ligne. Par défaut, SQL Server ne fournit pas de méthode native pour joindre des tables sur des numéros de ligne. Cependant, en utilisant la fonction ROW_NUMBER(), nous pouvons créer une colonne virtuelle qui attribue un numéro de ligne unique à chaque ligne de chaque table.
Pour effectuer une jointure interne sur les numéros de ligne dans SQL Server 2008, vous pouvez utiliser les étapes suivantes :
-- Create a virtual column with row numbers for Table A SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM A -- Create a virtual column with row numbers for Table B SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM B -- Join the two tables on the row number virtual columns SELECT A.val, B.val FROM ( SELECT val, row_num FROM A ) AS A INNER JOIN ( SELECT val, row_num FROM B ) AS B ON A.row_num = B.row_num ORDER BY A.val, B.val
Cette requête renverra le résultat suivant :
En faisant correspondre les numéros de ligne, nous avons réussi à joindre les deux tables.
Alternativement, si vous n'avez pas d'exigence spécifique de tri, vous pouvez obtenir le même résultat sans explicitement classer les tables :
-- Create a virtual column with row numbers for Table A SELECT val, ROW_NUMBER() OVER () AS row_num FROM A -- Create a virtual column with row numbers for Table B SELECT val, ROW_NUMBER() OVER () AS row_num FROM B -- Join the two tables on the row number virtual columns SELECT A.val, B.val FROM ( SELECT val, row_num FROM A ) AS A INNER JOIN ( SELECT val, row_num FROM B ) AS B ON A.row_num = B.row_num ORDER BY A.row_num
Cette requête renverra les lignes dans l'ordre dans lequel elles apparaissent :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!