10

INNER JOIN サブクエリの where 句に問題があります。の列が不明であるというエラーが表示されM.idMembreます。エイリアスの代わりにテーブル名を使用してみましたが、同じ問題が発生します。また、サブクエリから WHERE 句を削除し、サブクエリの後の ON 句にこの条件を追加しようとしました。しかし、私はどちらの方法でも同じ問題を抱えています。ここに欠けているのは明らかだと思います。

SELECT DISTINCT M.`idMembre` ,  `couponsTypes`.`maxCouponType` 
FROM membres AS  `M` 
INNER JOIN (
SELECT idMembre, MAX( coupons.`idType` ) AS  `maxCouponType` 
FROM coupons
WHERE coupons.`idMembre` = M.`idMembre` 
GROUP BY idMembre
) AS  `couponsTypes` 
ON M.`idMembre` = couponsTypes.`idMembre`
ORDER BY maxCouponType DESC 

さらに情報が必要な場合はお知らせください。

4

2 に答える 2

19

結合句のサブクエリで外部テーブルを参照することはできません。これを解決する 1 つの方法はgroup by、結合条件に基づいてサブクエリで a を実行することです。

SELECT DISTINCT M.`idMembre`, `couponsTypes`.`maxCouponType`
FROM membres AS `M` 
INNER JOIN
(SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType`
   FROM coupons
   GROUP BY idmembre
) `couponsTypes`
ON couponstypes.idMembre = M.idMember
ORDER BY maxCouponType DESC

membresただし、テーブルはまったく必要ありません。外側selectで参照されますが、クーポン タイプ テーブルのメンバー ID に相当します。したがって、クエリを次のように記述できます。

SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType`
FROM coupons
GROUP BY idmembre
ORDER BY 2 DESC

これは、おそらく最も単純で効率的な定式化です。

于 2012-12-18T21:36:36.697 に答える
2

サブクエリは、外側のクエリのテーブルにアクセスできません。つまり、サブクエリが評価される時点では、membresテーブル (エイリアスM) は使用できません。couponsTypes

ただし、この場合、そのようなサブクエリは必要ありません。テーブルを直接結合して結果をグループ化するだけです。

SELECT   idMembre, MAX(coupons.idType) AS maxCouponType
FROM     membres JOIN coupons USING (idMembre)
GROUP BY idMembre
ORDER BY maxCouponType DESC
于 2012-12-18T21:35:07.433 に答える