views:

339

answers:

2

I'd like to use MySQL in this form:

SELECT 1 AS one, one*2 AS two

because it's shorter and sweeter than

SELECT one*2 AS two FROM ( SELECT 1 AS one ) AS sub1

but the former doesn't seem to work because it expects one to be a column.

Is there any easier way to accomplish this effect without subqueries?

And no, SELECT 2 AS two is not an option. ;)

+2  A: 
select @one := 1 as one, 2 * @one as two;

user-defined variables

ʞɔıu
Great, thank you. No day has been passed without learning a new thing.
pestaa
+1  A: 

Considering this SQL code

SELECT 1 AS one, one*2 AS two

from the perspective of SQL the language (and why not; mysql has a good track record of compliance with the ISO/ANSI SQL Standards), your one is not a variable; rather it is a column correlation name. You cannot use the correlation name in the SELECT clause with the same scope, hence the error.

FWIW your 'shorter and sweeter' syntax does actually work when using the MS Access Database Engine -- is that where you learned it, perchance? Sadly, the Access Database Engine has a poor track record of compliance with the Standards. It is said to take a long time to un-learn Access-speak and learn SQL code ;)

onedaywhen
No, I actually hate Access-speak, so I didn't have to unlearn it fortunately -- but my assumption came from programming-speak, which caused this misunderstanding. Thank you for your answer! It's rare to see insightful posts after an accepted answer.
pestaa