Comment joindre deux tables, sans aucune condition
Par exemple, j'ai deux tables (tables temporaires). L'un d'eux contient uniquement les Id, et l'autre contient de l'information réelle. Ils ont exactement le même numéro de ligne.
#Table1
ID
14
15
16
#Table2
CarModel Year
Ford 1996
Ferrari 2005
Toyota 2010
Comment puis-je joindre ces deux table en une seule (sans aucune condition, juste le résultat de la table a 3 colonnes, peu importe dans quel ordre)? J'ai besoin d'elle pour insérer le résultat réel de la table
Cars
ID CarModel Year
Et ce tableau n'est pas l'identité. Il existe un mécanisme d'obtenir des Identifiants pour l'insertion.
Je ne suis pas en mesure de le changer.
Donc, comme un résultat que j'ai besoin d'une table, comme un des éléments suivants (la commande n'est PAS important):
#Table3
ID CarModel Year
14 Ford 1996
15 Ferrari 2005
16 Toyota 2010
ou
#Table3
ID CarModel Year
16 Ford 1996
14 Toyota 2010
15 Ferrari 2005
P. S. je comprends comment faire cela avec le CTE et la fonction row_number(), mais je pense qu'il est plus simple de la façon de faire cette tâche. Et peut-être ce code sera utilisé dans MS SQL Server 2000, de sorte que je serai heureux de regarder les autres variantes de solutions.
row_number()
serait le moyen pour y parvenir. Cependant, je dois vous demander POURQUOI vous voulez une jointure sur ces deux tableaux si ils ne contiennent des données liées.CTE et
ROW_NUMBER
semble être le meilleur moyen pour moi. Pour SQL Server 2000, vous auriez besoin de le simuler avec un identity
colonne ou triangulaire inscrire ou utiliser les curseurs.Je vous remercie pour votre réponse. J'ai besoin de ce rejoint date à insérer dans le réel (pas le temp) de la table. Et j'ai besoin de mon inséré les lignes ont IDs, j'ai obtenu à partir d'une procédure stockée. Mais j'ai vraiment ne se soucient pas de béton id sera dans chaque ligne. À tous j'ai besoin qu'ils seront tous à partir de mon "piscine" Oui, c'est pas le meilleur schéma, mais il est et je dois travailler avec elle.
OMG, vous devriez vraiment pas faire ça! Il n'y a pas de garantie de SQL Server permettra de préserver toute commande. Vous ne pouvez pas simplement choisir une ligne aléatoire et dire "Hey, vous aurez cette ID pour une requête!".
OriginalL'auteur Dmitry Gorshkov | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
Voici une triangulaire rejoindre qui serait à l'œuvre dans SQL Server 2000 par Martin Smith commentaire:
Bien sûr, cela suppose que la Table1.ID est unique et Table2.CarModel + Table2.L'année est unique.
Les considérations relatives aux performances des triangulaires jointures sont bien discuté ici: http://www.sqlservercentral.com/articles/T-SQL/61539/
where CarModel < a.CarModel or (CarMoDel = a.CarModel and [Year] < a.[Year])
?L'exécution du plan et des statistiques io sont identiques sur ma boîte. De toute façon, c'est à l'OP de faire des changements pour s'adapter à ses normes du code.
Pour une petite table, il ne serait pas question.
J'ai mis à jour pour utiliser votre plus élégante version de JoinPredicate. Merci.
OriginalL'auteur Tim Lehner