1

ユニオンを追加してから機能しないクエリのスナップショットを次に示します。

SELECT fin05_usager.idUsager,
       (SELECT sum(nombreReputation) as nombreReputation
          FROM (SELECT SUM(nombreReputationGagner) as nombreReputation
                 FROM fin05_usager_reputation 
                WHERE fin05_usager_reputation.idUsager = fin05_usager.idUsager
             GROUP BY fin05_usager_reputation.idUsager
        UNION
                SELECT SUM(cc_badge.valeurEnReputation) as nombreReputation
                  FROM cc_badge, fin05_usager_badge
                 WHERE fin05_usager_badge.idBadge = cc_badge.idBadge
                   AND fin05_usager_badge.idUsager = fin05_usager.idUsager) as repuUnion    
       ) as repu
 FROM fin05_usager
WHERE fin05_usager.idUsager = 6

エラー: #1054 - 不明な列 'fin05_usager.idUsager' in 'where 句'

fin05_usager.idUsager を削除して直接「6」を使用すると、機能します。

ユニオンを削除し、2 つの選択のうちの 1 つだけを使用すると、機能します (FROM fin05_usager_reputation を使用するか、FROM cc_badge、fin05_usager_badge.

UNION を使用すると、idUsager の検索に関するエラーが表示され、ユニオンがないとエラーが検出されないのはなぜですか?

簡略化されたスキーマ:

fin05_usager: idUsager int(8)

fin05_usager_reputation : idUsager int(8)、nombreReputationGagner int(4)

cc_badge : idBadge int(4)、valeurEnReputation int(4)

fin05_usager_badge : idUsager int(8)、idBadge int(4)

ノート:

クエリで直接サブクエリを実行することはできません。実際には、クエリは非常に大きく、すでにグループなどが含まれているため、select のサブクエリ内で使用する必要があります。

4

2 に答える 2

2

UNION を削除すると動作するようになるとあなたが言ったとき、私はあなたがこれを具体的に削除していると確信しています:

UNION
SELECT SUM(cc_badge.valeurEnReputation) as nombreReputation
  FROM cc_badge, fin05_usager_badge
 WHERE fin05_usager_badge.idBadge = cc_badge.idBadge
   AND fin05_usager_badge.idUsager = fin05_usager.idUsager

この部分にはfin05_usager.idusager、mysql エラーが参照している参照が含まれています。サブクエリ アクセスは、1 つのレベル (双方向) にのみ許可されます。SELECT 句内で SELECT を実行するべきではないことに注意してください。クエリを再解釈する方法は次のとおりです。

SELECT fu.idUsager,
       a.nombreReputation + b.nombreReputation AS repuunion
  FROM fin05_usager fu
  JOIN (SELECT fur.idusager,
               SUM(fur.nombreReputationGagner) as nombreReputation
          FROM fin05_usager_reputation fur 
         WHERE fur.idUsager = fin05_usager.idUsager
      GROUP BY fur.idUsager) a ON a.idusager = fu.idusager
  JOIN (SELECT fub.idUsager,
               SUM(ccb.valeurEnReputation) as nombreReputation
          FROM cc_badge ccb
          JOIN fin05_usager_badge fub ON fub.idbadge = ccb.idbadge
      GROUP BY fub.idUsager) b ON b.idusager = fu.idusager
 WHERE fu.idUsager = 6
于 2009-10-18T23:18:46.847 に答える
0

大丈夫、

メインクエリでGroupByを実行せずに今のところ見つけた唯一の方法(実際の状況では、すでにGroup By句が含まれているため、実行できないため)は、2で実行し、コードとマージすることです。 ...私が望むものを正確ではありませんが、少なくともそれは機能します:

    SELECT fin05_usager.idUsager,

                (SELECT sum(nombreReputationGagner) as nombreReputation1
                FROM fin05_usager_reputation 
                WHERE fin05_usager_reputation.idUsager = fin05_usager.idUsager
                group by fin05_usager_reputation.idUsager) as nombreReputation1
            ,
                (SELECT sum(cc_badge.valeurEnReputation) as nombreReputation2
                FROM cc_badge,  fin05_usager_badge
                WHERE fin05_usager_badge.idBadge = cc_badge.idBadge
                AND fin05_usager_badge.idUsager = fin05_usager.idUsager) as nombreReputation2

    FROM 
        fin05_usager
        where fin05_usager.idUsager = 6

コードでは、nombreReputation1とnombreReputation2を合計します。

于 2009-10-18T23:56:26.847 に答える