web-dev-qa-db-fra.com

Trier par Inner Join

Je mets la jointure interne dans ma requête.J'ai le résultat, mais je ne savais pas comment les données arriveraient en sortie.Peut-on me dire que la jointure interne correspond aux données.Blow, je montre une image.Il existe deux tables (une ou deux tables).

alt text

Selon moi, cette première rangée devrait être Mohit mais la sortie est différente.Veuillez me le dire.

Merci d'avance.

17
Mohit Kumar

Vous devez trier si vous voulez que les données reviennent d'une certaine manière. Lorsque vous dites que vous vous attendez à ce que "Mohit" soit la première ligne, je suppose que vous dites cela car "Mohit" est la première ligne de la table [One]. Toutefois, lorsque SQL Server joint des tables, il ne le fait pas nécessairement dans l'ordre que vous pensez.

Si vous souhaitez que la première ligne de [One] soit renvoyée, essayez de trier par [One].[ID]. Alternativement, vous pouvez order by n'importe quelle autre colonne.

4
dotariel

Dans SQL, l'ordre de la sortie n'est défini que si vous le spécifiez dans la clause ORDER BY.

Essaye ça:

SELECT  *
FROM    one
JOIN    two
ON      one.one_name = two.one_name
ORDER BY
        one.id
11
Quassnoi

Évitez SELECT * dans votre requête principale. 

Évitez les colonnes en double: la condition JOIN garantit que One.One_Name et two.One_Name seront égaux; vous n'avez donc pas besoin de les renvoyer dans la clause SELECT.

Évitez les noms de colonnes en double: renommez One.ID et Two.ID en utilisant des «alias».

Ajoutez une clause ORDER BY en utilisant les noms de colonne ('alises' le cas échéant) de la clause SELECT.

Suggestion de réécriture:

SELECT T1.ID AS One_ID, T1.One_Name, 
       T2.ID AS Two_ID, T2.Two_name
  FROM One AS T1
       INNER JOIN two AS T2
          ON T1.One_Name = T2.One_Name
 ORDER 
    BY One_ID;
5
onedaywhen

Ajoutez un ORDER BY ONE.ID ASC à la fin de votre première requête.

Par défaut, il n'y a pas de commande.

3
JNK

SQL ne renvoie aucun ordre par défaut car il est plus rapide de cette façon. Il n'est pas nécessaire que vos données soient d'abord analysées, puis que vous décidiez quoi faire.

Vous devez ajouter une clause order by, et probablement un ordre correspondant à l'ID que vous attendez. (Il y a une copie de noms, donc je suppose que vous voulez One.ID)

select * From one
inner join two
ON one.one_name = two.one_name
ORDER BY one.ID
1
Tyug

J'ai trouvé cela problématique lors de l'adhésion, mais vous trouverez peut-être utile de consulter ce blog pour comprendre le fonctionnement des jointures à l'arrière . Comment les jointures fonctionnent-elles ...

[Modifié] @ Shree Merci de l'avoir signalé . Sur le paragraphe de Fusion de jointures. Il mentionne comment les jointures fonctionnent ...

Comme jointure de hachage, la jointure de fusion se compose de deux étapes. Tout d’abord, les deux tables du join sont triés sur l'attribut join. Cela peut être fait avec seulement deux passe à travers chaque table via un tri de fusion externe. Finalement, le les n-uplets de résultat sont générés au fur et à mesure que l'élément ordonné suivant est extrait chaque table et les attributs de jointure sont comparés

.

0
Muzamir