質問

私は連合を追加しましたので、ここで仕事をしません、クエリのスナップショットがある。

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' 'where句'

私はそれが仕事をしfin05_usager.idUsagerを削除し、直接「6」を使用している場合。

私は労働組合と使用を削除した場合のみ、1 2のそれが機能選択(いままで、私は、fin05_usager_reputationまたはcc_badge FROM他のものからfin05_usager_badgeを取る場合。

idUsagerが表示され、組合せずにエラーが検出されない見つけることについてエラーをUNIONを使用している場合はなぜですか?

スキーマ簡略化:

fin05_usager:idUsager INT(8)

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

cc_badge:idBadge INT(4)、valeurEnReputation整数(4)

fin05_usager_badge:idUsager INT(8)、idBadge整数(4)

注:

私は、クエリで直接副問合せを行うことはできません。私は本当で、クエリグループなどが含まれて非常に大きく、すでにあるので、選択のサブクエリ内でそれを使用する必要があります。

役に立ちましたか?

解決 2

さてさて、

私は、メインクエリでグループ化を行うことなく、一瞬のために見つけた唯一の方法は、(実際の状況で、私はそれが節では、すでにグループを含まないことができないためので)2でそれを行うには、それをマージすることですコードではない... exaclty私が好きだろうが、それは少なくとも、どのような作品ます:

    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を合計します。

他のヒント

:あなたは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

この部分は、MySQLエラーが参照していることfin05_usager.idusagerにrefernceを含んでいます。両方の方法を - サブクエリのアクセスは一つだけのレベルに許可されています。ネヴァーマインドあなたは本当に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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top