День добрый. Несколько лет не работал с базами, теперь страшно туплю^W^W испытываю некоторые трудности с решением такой вот задачи. Имеется таблица следующего типа:
---------
| U | V |
---------
| x | a |
| x | b |
| x | c |
| y | i |
| y | j |
| y | h |
| y | g |
| z | s |
| z | t |
---------
-------------
| U | V | W |
-------------
| x | a | 1 |
| x | b | 2 |
| x | c | 3 |
| y | i | 1 |
| y | j | 2 |
| y | h | 3 |
| y | g | 4 |
| z | s | 1 |
| z | t | 2 |
-------------
Т.е. необходимо пронумеровать каждую группу образуемую первым аттрибутом по отдельности. Порядок нумерации элементов группы значения не имеет. Первое, что пришло на ум это:
SELECT outer.U, outer.V,
(
SELECT @a:=@a+1 rownum
FROM
(SELECT @a:=0) tmp,
(SELECT *
FROM `table` double_nested
WHERE double_nested.U = outer.U) nested // error
WHERE nested.V = outer.V
) as W,
FROM `table` outer
На что MySQL выдаёт: «#1054 - Unknown column 'outer.U' in 'where clause'». Почитав документацию, нашёл там такие строки (отсюда http://dev.mysql.com/doc/refman/5.0/en/unnamed-views.html):
Subqueries in the FROM clause cannot be correlated subqueries, unless used within the ON clause of a JOIN operation.
Т.е., коррелированые подзапросы во FROM просто так не поддерживаются. Вопрос - можно ли решить эту задачу не прибегая к хранимым процедурам ?