Č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ď č. 1Pokiaľ 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.