0

この SQL は部分的に機能しますが、すべてをまとめると、単純に次のようなエラーが発生します。

グループ機能の不正使用

GROUPステートメントを使用していないため、UPDATEステートメント自体を参照していると思いますが、理由はわかりません。

私のクエリ:

UPDATE `Scores` s
INNER JOIN `Players` p ON s.PlayerID = p.PlayerID
INNER JOIN (SELECT PlayerID, Number FROM `NumberHistory` h WHERE PlayerID = 136 ORDER BY Created DESC LIMIT 1) f ON p.PlayerID = f.PlayerID
INNER JOIN (
    SELECT Number FROM `Players` WHERE PlayerID = 136
    UNION ALL
    SELECT Number FROM `NumberHistory` WHERE PlayerID = 136
) m
LEFT OUTER JOIN (
    SELECT PlayerID, COUNT(PlayerID) Activity
    FROM `NumberHistory` WHERE Created BETWEEN DATE_ADD(NOW(), INTERVAL -7 DAY) AND NOW()
) a ON p.PlayerID = a.PlayerID
SET s.PlayerID=p.PlayerID, s.PlayerName=p.PlayerName, s.Number=MAX(m.Number), s.PreviousNumber=f.Number, s.Diff=(p.Number-IFNULL(f.Number,0)), s.Activity=IFNULL(a.Activity, 0)
WHERE s.PlayerID = 136
4

1 に答える 1

1

max()でそのように使用することはできませんset。サブクエリに追加ORDER BY Number DESC LIMIT 1すると、必要なことが実行さmれる場合があります。

UPDATE `Scores` s INNER JOIN
       `Players` p
       ON s.PlayerID = p.PlayerID INNER JOIN
       (SELECT PlayerID, Number
        FROM `NumberHistory` h
        WHERE PlayerID = 136
        ORDER BY Created DESC
        LIMIT 1
       ) f
       ON p.PlayerID = f.PlayerID INNER JOIN
       (SELECT Number FROM `Players` WHERE PlayerID = 136
        UNION ALL
        SELECT Number FROM `NumberHistory` WHERE PlayerID = 136
        ORDER BY Number DESC
        LIMIT 1
       ) m LEFT OUTER JOIN
       (SELECT PlayerID, COUNT(PlayerID) as Activity
        FROM `NumberHistory`
        WHERE Created BETWEEN DATE_ADD(NOW(), INTERVAL -7 DAY) AND NOW()
       ) a
       ON p.PlayerID = a.PlayerID
 SET s.PlayerID = p.PlayerID,
     s.PlayerName = p.PlayerName, 
     s.Number = m.Number,
     s.PreviousNumber = f.Number,
     s.Diff = (p.Number-IFNULL(f.Number,0)),
     s.Activity = IFNULL(a.Activity, 0)
WHERE s.PlayerID = 136
于 2014-12-29T12:26:06.393 に答える