/ / Ako odkazovať na premennú vytvorenú v priebehu spúšťania dotazu v T-SQL v klauzule WHERE? - sql, tsql

Ako odkazovať na premennú vytvorenú počas spúšťania dotazu v T-SQL v klauzule WHERE? - sql, tsql

Čo hovorí názov, naozaj.

Ak vyberiem [vyhlásenie] ako čokoľvek, prečo sa nemôžem odvolávať na akýkoľvek stĺpec v tele klauzuly WHERE? Existuje nejaký spôsob riešenia?

odpovede:

3 pre odpoveď č. 1

Pokiaľ som si vedomý, nemôžete priamo robiť to v SQL Server.

Ak naozaj musíte použiť dolný stĺpec v klauzule WHERE, môžete to urobiť, ale zdá sa, že je to nadmerné použitie poddotazu len pre alias:

SELECT *
FROM
(
SELECT [YourColumn] AS YourAlias, etc...
FROM Whatever
) YourSubquery
WHERE YourAlias > 2

Budete takmer určite lepšie, ak použijete obsah pôvodného stĺpca v klauzule WHERE.


3 pre odpoveď č. 2

Má to čo do činenia s príkazom SELECTpreložené do stromu abstraktných dotazov: "čo" sa objaví iba v časti stromu, ktorá je nad filtračnou časťou stromu, takže klauzula WHERE nerozumie "čo". Nie sú to niektoré detaily týkajúce sa vnútornej implementácie, je to základné správanie relácií: zobrazenie výsledku po hodnotenie spojov a filtrov.

Je to naozaj triviálne riešenie "problému" tým, že hierarchia dotazu je explicitná:

select ...
from (
select [something] as whatever
from ...
) as subquery
WHERE whatever = ...;

Spoločný výraz tabuľky môže mať rovnaký účel:

with cte as (
select [something] as whatever
from ...)
select ... from cte
WHERE whatever = ...;

2 pre odpoveď č. 3

Má to za sebou s poradím operácií vvyberte výpis. Klauzula WHERE sa hodnotí pred klauzulou SELECT, takže táto informácia nie je k dispozícii. Napriek tomu, že je k dispozícii v klauzule ORDER BY po jej poslednom spracovaní.

Ako už uviedli iní, podstránka sa obeslí okolo tohto problému.