9
votes

Résultat du syndicat du filtre

Je fais un choix avec union. Sélectionnez * à partir de table_1 Union Select * à partir de table_2 ...

est-il possible de filtrer le résultat de la requête par des valeurs de colonne?


1 commentaires

Vous pouvez également définir une vue avec votre syndicat, puis utiliser cette vue dans une nouvelle instruction SELECT. À la fin, c'est la même chose comme la solution de Damien_the_unbeliever ...


3 Réponses :


13
votes

Oui, vous pouvez joindre l'ensemble de l'union à l'intérieur d'un autre SELECT:

select * from (
select * from table_1 union select * from table_2) as t
where t.column = 'y'


2 commentaires

Si j'introduit cet alias, la table temporaire est-elle créée dans TEMBDB dans les tables système?


@GRUBER - L'alias est juste nécessaire car chaque table (ou source de lignes qui ressemble à une table) dans la clause de la clause doit avoir un nom. Si les ensembles de résultats finissent par entrer dans TEMPDB sont entièrement à la hauteur de l'optimiseur, en fonction de la taille de l'ensemble de résultats et du type d'opérations effectuées (par exemple, si vous triez un ensemble de résultats importants, il risque de finir dans TEMPDB)



3
votes

Si vous souhaitez filtrer la requête en fonction de certains critères, vous pouvez le faire -

Select * from table_1 inner join table_2 on table_1.col1 = table_2.col1


0 commentaires

3
votes

Une solution simple à lire consiste à utiliser un CTE (expression de table commune). Cela prend la forme:

WITH foo AS (
    SELECT thing FROM place WHERE field = 'Value'
),
bar AS (
    SELECT otherthing FROM otherplace WHERE otherfield = 'Other Value'
)


2 commentaires

La pointe est probablement dans cette section ... - Syntaxe pour SQL Server [avec [ ... n]]] :: = expression_name [(Nom de colonne [ ... N])] comme ( Cte_query_definition) Mais je ne sais pas comment déchiffrer ces choses ... personne sache où je peux rechercher la syntaxe de la définition de la syntaxe?


C'est ce bit: [ ... n]