ugrás a tartalomhoz

select AS

simisoma · 2020. Május. 14. (Cs), 15.35
Sziasztok,

ha van több táblás, nagyobb lekérdezésem amiben eredményeket AS álnéven listázok és ezekkel szeretnék tovább számolni.

pl:

select a-b as ab, c-d as cd form table;

és szeretnék az ab és a cd alias-al továbbszámolni:

select a-b as ab, c-d as cd, ab-cd as abcd form table;

Erre milyen megoldás van?

Ezen kívül: select a-b as ab, c-d as cd, (a-b)-(c-d) as abcd form table;

Remélem érthetően írtam :-)

Nagyon köszönöm előre is a segítséget!
 
1

Ez műxik

Pepita · 2020. Május. 18. (H), 11.31
select a-b as ab, c-d as cd, (a-b)-(c-d) as abcd form table;

Más megoldást nem tudok, alias-ra nem lehet egyazon select-en belül hivatkozni.
Egyébként miért van rá szükség? Miért nem jó ez, ami műxik? Erősen gyanítom, hogy a mysql szerver (amennyiben arról beszélünk) soronként csak egyszer fogja kiszámolni, amit lehet, cache-el. Így nincs igazán jelentősége, hogy hányszor szerepel pl az a-b.
2

Ez engem is foglalkoztatott

vbence · 2020. Május. 18. (H), 22.16
Az a mondás, hogy a WHERE előbb értékelődik ki mint a SELECT. Ettől még lehetne valami preprocesszor az aliasok feloldására, de az kb azt jelentené, hogy kétszer parzoljuk be az SQL-t (beágyazott SELECT-eknél nem egyértelmű az aliasok szkópja teljes parzolás nélkül).
3

Having

Pepita · 2020. Május. 21. (Cs), 07.35
A HAVING viszont GROUP BY után, tehát azért létezik megoldás, de itt nem volt JOIN, így kár lett volna ezzel bonyolítani. Mondjuk erőforrás szempontjából sem mindegy, jobb mindig "minél előbb szabadulni" a nem kívánt rekordoktól, pl ami "elfér" JOIN feltételként, az legyen ott, nem WHERE - ben. HAVING csak akkor, ha nincs más megoldás.
4

Having

vbence · 2020. Május. 23. (Szo), 17.32
Azért HAVING-gel nem helyettesíteném, ha csak szépészeti / olvashatósági a motiváció.

JOIN és WHERE között én úgy tapasztaltam szabadon optimizálnak (legalább is a MySQL).