2012-06-25 2 views
1

Я хотел бы выбрать данные из нескольких таблиц, как показано ниже. Я хочу, чтобы для каждой группы «dID» был добавлен автоматический прирост «gID». В нескольких таблицах, которые я запрашиваю, нет значений автоматического увеличения. Поэтому поле gID должно создаваться «на лету».MySQL SELECT приращение строки по группе

dID  gID  bID  data 
===  ===  ===  ==== 
400  1  20  data1 
400  2  21  data2 
401  1  28  data3 
402  1  52  data4 
402  2  74  data5 
402  3  75  data6 
402  4  89  data7 

Я не могу понять, как этого достичь.

Я пытался сделать это, но не кажется, что это будет работать:

SELECT t1.dID, @i:[email protected]+1 AS gID, t2.bID, t2.data 
FROM table1 t1, table2 t2, (SELECT @i:=0) m 
WHERE t1.mID = t2.mID 
ORDER BY t1.dID 
+0

«кажется, не работает» - не полезно – zerkms

+0

@zerkms: извините, мне пришлось переформатировать дисплей выше. Таблица не показывалась должным образом. Вы должны быть в состоянии читать сейчас. – user1448031

+0

читать что? Что случилось с запросом? Он «не работает» - ничего не объясняет – zerkms

ответ

2

Нет необходимости в "@" переменных ... Попробуйте это:

SELECT 
    a.dID, 
    COUNT(*) AS gID, 
    b.bID, 
    b.data 
FROM 
    table1 a 
INNER JOIN 
    table2 b ON a.mID = b.mID 
INNER JOIN 
    (
     SELECT a.dID, b.bID 
     FROM table1 a 
     INNER JOIN table2 b ON a.mID = b.mID 
    ) c ON a.dID = c.dID AND b.bID >= c.bID 
GROUP BY 
    a.dID, 
    b.bID 
ORDER BY 
    a.dID, 
    gID 

Это решение также позволяет bID для получения повторяющихся значений (уникально для группы dID).