1

I have been trying to define "dynamically" the offset of a query.

But when executing this query I always end up with a You have an error in your SQL syntax;

When I do remplace the subquery by a number it does work fine. Is there something wrong in a query that has this shape?

SELECT LengthOfStay
FROM table1
LIMIT (SELECT CAST(COUNT(DISTINCT(LengthOfStay)) / 2 AS SIGNED) FROM table1 t1), 2;

Ps. I casted it so I can make sure it's an integer.

Spredzy
  • 4,982
  • 13
  • 53
  • 69
  • Avoid the pain, do two queries mate, even if you succeed IMHO you'r code will be much messier. That's just my opinion :) – DivinesLight Nov 18 '11 at 11:35
  • 2
    Looks like duplicate [How to make limit offset dynamic using only (My)SQL](http://stackoverflow.com/questions/5872667/how-to-make-limit-offset-dynamic-using-only-mysql) – Michał Powaga Nov 18 '11 at 11:36

2 Answers2

2

You can not use a subquery as a LIMIT argument. Limit argument should be an INTEGER. Your subquery returns, well... basically, a table.

What are trying to achieve by this query anyway? This query does not make any sense to me...

Nemoden
  • 8,816
  • 6
  • 41
  • 65
0

As @michal points out the answer is in How to make limit offset dynamic using only (My)SQL

Basically if you're not in a stored procedure or a prepared statement you can't do it.

If you have a stored procedure just assign a variable the value of your "inner" select and use that on the real statement.

If you have a prepared statement use "limit ?, ?" and set the values from the call.

Community
  • 1
  • 1
Andreas Wederbrand
  • 38,065
  • 11
  • 68
  • 78