Énoncé du problème :
Vous avez deux tables avec une caractéristique commune : leurs numéros de ligne . Votre objectif est d'effectuer une jointure interne sur cet attribut et de récupérer des données spécifiques.
Scénario spécifique :
Considérez deux tables, A et B, avec les données suivantes :
Tableau A
RowA |
---|
RowB |
RowC |
RowD |
Tableau B
Row4 |
---|
Row3 |
Row2 |
Row1 |
Sortie souhaitée :
Solution :
Pour obtenir la jointure interne souhaitée sur le numéro de ligne, vous pouvez utiliser la fonction ROW_NUMBER() dans SQL Server 2008 comme suit :
SELECT A.val, B.val FROM ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM A ) AS A JOIN ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM B ) AS B ON A.row_num = B.row_num ORDER BY A.val, B.val
Explication :
Scénario alternatif :
Si vous souhaitez que les lignes apparaissent dans le même ordre que dans les tables individuelles sans clause ORDER BY, modifiez la requête vers :
SELECT A.val, B.val FROM ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM A ) AS A JOIN ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM B ) AS B ON A.row_num = B.row_num
Cette révision élimine la clause ORDER BY supplémentaire, conservant la séquence originale de lignes.
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!