最適化されたクエリが必要な場合は、スキーマの適切な詳細 (テーブル、データ型、およびインデックス) を提供してください。
SELECT id, email
FROM users
WHERE id
IN (
SELECT user_id
FROM accounts
WHERE users.id = user_id
)
どうしても必要な場合を除き、サブクエリは使用しないでください。アカウント テーブルにデータが必要ないため、'EXISTS (SELECT 1 FROM accounts WHERE users.id=user_id)' はほとんどの DBMS ではるかに効率的ですが、最適化されない MySQL では効率的ではありません。述語を適切にプッシュします。
クエリは次のとおりです。
SELECT DISTINCT u.id, u.email
FROM users u INNER JOIN accounts a
ON u.id=a.user_id;
ユーザーが 3 つ以上の製品を購入した製品テーブルから除外
前のクエリを書き直すのに十分なスキーマを推測できますが、製品テーブルがどのように構造化されているかわかりません。実際、「製品」はアイテムのカタログを意味し、アカウントとの関係は n:m のようですこれは、関係を分解するテーブルが欠落している必要があることを意味します。さらに、あなたの説明から、アカウントデータは「製品」テーブルデータとは無関係です(これは非常に奇妙に思えます)。ユーザーが「製品」に関連レコードを持たないケースを含めますか?
これが当てはまらないと仮定して、構造が何であるかを推測すると....
SELECT u.id, u.email, SUM(IF(leader_id IS NULL, 0, amount))
FROM users u INNER JOIN accounts a
ON u.id=a.user_id
LEFT JOIN product p
ON u.id=p.leader_id
GROUP BY u.id, u.email;
テーブルが非常に大きいため、最適化されたクエリが必要です
1 回のクエリですべてのデータを確認する必要があるのはなぜですか?