9
votes

SQL: Comment puis-je vous référer au résultat d'une requête précédente?

Supposons que j'ai une requête SQL qui ressemble à ceci: xxx

Supposons que je souhaite suivre la requête précédente avec une autre: xxx < p> Qu'est-ce que je mets pour (résultat de la requête précédente) pour rendre cette renvoie les noms de famille des enregistrements dans lesquels le FNAME correspond à l'enregistrement probablement unique où SSN = 123456789? < 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?»

BTW, si cela fait une différence, si cela fait une différence, je ' m Utilisation de MS SQL Server 2008. Merci!


3 commentaires

Quelle est votre utilisation réelle pour cela? Avez-vous réellement besoin 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!


3 Réponses :


6
votes
 SELECT lName from records r
 INNER JOIN employees e ON (e.fName = r.fName)
 WHERE e.ssn = 123456789

0 commentaires

8
votes

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


1 commentaires

Cela ne fonctionne pas si le premier Sélectionnez retourne plusieurs rangées.



9
votes

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> xxx pré>

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 distincte code> instruction ou déclarez-le dans le cadre de votre sélection comme je le fais ci-dessous. p> xxx pré>

sous-requête strong> p>

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>

Select @fname = fname 
from employees 
Where ssn = 123456789

Select lName from records
where fname in 
(
   Select fname 
   from employees 
   Where ssn = 123456789 
)


0 commentaires