1

以下のように複数のテーブルからデータを選択したいと思います。'dID'のグループごとに'gID'の自動インクリメントが必要です。クエリしている複数のテーブルには、自動インクリメント値がありません。したがって、gIDフィールドはその場で作成する必要があります。

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:=@i+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 
4

1 に答える 1

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グループごとに一意)。

于 2012-06-25T03:28:52.373 に答える