Supposons que j'ai une requête SQL qui ressemble à ceci: Supposons que je souhaite suivre la requête précédente avec une autre: p> BTW, si cela fait une différence, si cela fait une différence, je ' m Utilisation de MS SQL Server 2008. Merci! P> P> (résultat de la requête précédente) code> pour rendre cette renvoie les noms de famille des enregistrements dans lesquels le FNAME correspond à l'enregistrement probablement unique où SSN = 123456789? P> < P> Je sais que c'est un exemple irréaliste, mais ce que je demande, c'est: «Comment puis-je vous référer au résultat de ma requête précédente?» P>
3 Réponses :
SELECT lName from records r INNER JOIN employees e ON (e.fName = r.fName) WHERE e.ssn = 123456789
Vous pouvez enregistrer le résultat de la première requête dans une variable et utiliser cette variable dans la deuxième requête.
DECLARE @firstName VARCHAR(255) SELECT @firstName = fName from employees where ssn=123456789 SELECT lName from records WHERE fName=@firstName
Cela ne fonctionne pas si le premier Sélectionnez CODE> retourne plusieurs rangées.
Il y a trois manières évidentes de faire cela. Vous pouvez utiliser des variables SQL, des tables TEMP (ou des variables de table, elles sont à peu près équivalentes) ou vous pouvez utiliser une sous-requête.
variables SQL strong> p> Vous stockez la valeur souhaitée Dans une variable (la pièce de code @FName ci-dessous), vous pouvez ensuite l'utiliser plus tard. Avec cette approche, vous voulez faire attention à ce que votre SSN soit vraiment l'identificateur unique. P> Table TEMP strong> p> avec un Table TEMP Vous créez une table des enregistrements que vous souhaitez. Cela peut ensuite être utilisé ultérieurement et pour obtenir les enregistrements que vous souhaitez que vous utilisiez ensuite la table Temp dans une sous-requête. P> Vous pouvez déclarer la table TEMP sous la forme d'une table Ceci est En fait, très similaire à l'approche de la table Temp, mais vous intégrez la pièce TEMP TABLE, vous ne pouvez plus vous en référer plus tard. P> distincte code> instruction ou déclarez-le dans le cadre de votre sélection comme je le fais ci-dessous. p>
Select @fname = fname
from employees
Where ssn = 123456789
Select lName from records
where fname in
(
Select fname
from employees
Where ssn = 123456789
)
Quelle est votre utilisation réelle pour cela? Avez-vous réellement besoin b> pour l'avoir divisé dans deux questions?
Ce n'est pas un exemple de quelque chose que je fais réellement. J'utilise simplement ces déclarations pour poser la question suivante: "Quand j'écris une requête, comment puis-je vous référer au résultat de la requête précédente?" Je sais que j'ai vu cela quelque part auparavant, mais essayez de même que je peux, je ne peux pas sembler le retrouver ...
Joindre, sous-requête, variable, CTE, croix Appliquer, Table Table de TEMP dans l'ordre de cet ordre!