Comment référencer une sous-requête dans la clause WHERE

awj

J'ai une requête SQL (T-SQL) dans laquelle j'ai une sous-requête dans l' SELECTinstruction.

Voici une version réduite:

SELECT 
    p.id AS id,
    (SELECT
        jobs_without_price.id
    FROM
        st_job jobs_without_price
    WHERE
        jobs_without_price.person_id = p.id
    AND
        jobs_without_price.price IS NULL
    FOR XML AUTO, ROOT('jobs')) AS JobsWithoutPrice
FROM
    st_person p
WHERE
    JobsWithoutPrice IS NOT NULL
GROUP BY 
    p.id

Le problème est que SSMS me dit

Nom de colonne non valide "JobsWithoutPrice".

C'est presque certainement parce que SQL n'autorise pas les alias dans les WHEREclauses, mais comment puis-je utiliser le résultat de cette sous-requête pour filtrer les résultats?

[La requête complète a plus de jointures de table et bien plus dans l' SELECTinstruction, qui se rapportent toutes à un seul enregistrement de personne , alors que la sous-requête renvoie plusieurs enregistrements, c'est pourquoi elle se trouve dans une sous-requête.]

gotqn

Vous devriez pouvoir le faire en déplaçant simplement l' opérateur sub-queryin CROSS APPLY. Quelque chose comme ça:

SELECT 
    p.id AS id
   ,newXML
FROM
    st_person p
CROSS APPLY
(
    SELECT
        jobs_without_price.id AS JobsWithoutPrice
    FROM
        st_job jobs_without_price
    WHERE
        jobs_without_price.person_id = p.id
    AND
        jobs_without_price.price IS NULL
    FOR XML AUTO, ROOT('jobs')
) AS DS (newXML)
--WHERE
--    newXML IS NOT NULL
GROUP BY 
    p.id;

Notez que j'ai commenté le dernier WHEREarticle. Nous devrions en avoir besoin, tout comme CROSS APPLYrenvoyer les lignes de la partie gauche qui correspondent à une ou plusieurs lignes dans la partie droite (comme INNER JOIN). Vous pouvez essayer OUTER APPLYd'obtenir toutes les lignes de la partie gauche de l'opérateur (comme LEFT JOIN).

Vous êtes autorisé à utiliser les colonnes retournées par l' APPLYopérateur dans chaque article ( SELECT, JOIN, WHERE, ORDER BY, HAVING, GROUP BY).

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Ajouter un alias pour une sous-requête que je peux référencer dans la clause WHERE principale

Comment utiliser une sous-requête dans la clause where dans peewee?

Comment affecter une variable dans la clause WHERE d'une sous-requête dans SQL Server

Comment puis-je réutiliser une variable dans une clause WHERE de sous-requête?

Postgres Référence un résultat de sous-requête dans la clause where

Utilisation d'une sous-requête dans la clause WHERE de gapfill dans TimescaleDB

Comment référencer une sous-requête en utilisant un alias dans une requête AREL?

Dans Laravel Eloquent, comment référencer la requête principale dans la sous-requête

SQLAlchemy - sous-requête dans une clause WHERE

Comment utiliser un alias dans une sous-requête dans la clause SELECT? postgreSQL

Comment utiliser une expression régulière dans la clause WHERE de la requête dans Laravel?

SQL SERVER: clause WHERE dans la sous-requête pour obtenir l'attribut d'une requête externe

La sous-requête existentielle et la clause OR dans la clause WHERE provoquent une erreur inconnue

Sous-requête dans la clause where

WHERE dans la clause (sous-requête) yii

Sous-requête SQL HIVE dans la clause WHERE

Sequelize - sous-requête dans la clause where

Comment utiliser un tableau dans la clause where dans une requête MySQL dans Laravel

Comment écrire une sous-requête sophistiquée à partir de la clause dans ecto?

Comment utiliser une sous-requête dans la clause FROM de MySQL ?

Comment créer un sourceOLEDB dans un flux de données avec la clause where est une sous-requête d'une autre base de données

PostgreSQL: comment incorporer une clause WHERE dans une requête

Comment utiliser des variables dans une requête Ecto dans la clause where

Comment puis-je référencer tous les éléments de la collection JToken dans une sous-requête

comment référencer les données de la requête dans une cellule spécifique

comment écrire une requête mysql avec plusieurs champs (ayant des combinaisons dans la clause where)

comment placer la clause WHERE conditionnelle dans une requête LINQ

Comment faire une requête de jointure gauche avec la clause Where dans TastyPie?

Comment écrire OrderByDescending et la clause where dans une seule requête LinQ

TOP liste

chaudétiquette

Archive