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 basée sur les numéros de ligne dans SQL Server ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 11:38:10202parcourir

How to Perform an Inner Join Based on Row Numbers in 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 :

  • Tableau A : RowA, RowB, RowC, RowD
  • Tableau B : Row4, Row3, Row2, Row1

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 :

  • RowA Row1
  • RowB Row2
  • RowC Row3
  • RowD Row4

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 :

  • RowA Row4
  • RowB Row3
  • RangéeC Rangée2
  • RangéeD Rangée1

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn