SELECTクエリで「不可能なWHERE」が発生しているようです。以下に2つのクエリを投稿しました。これらは、サブクエリで区別されます。これらのクエリは、カウントを更新する前に、ユーザーが以前に何かを保存したことがあるかどうかを確認します。テスト目的でSELECTを使用していますが、実際のクエリはUPDATEを使用しています。
UPDATE articles SET article_count = article_count+1
WHERE id = 2343243 AND (
SELECT COUNT(*)
FROM posts as p
WHERE p.post_id = 2343243 AND p.user_id = 3
) = 1;
次の2つのクエリは、データがテーブルにあるかどうかを確認するためにテストに使用しているものです(テストのみ)。
EXPLAIN
SELECT a.id
FROM articles as a
WHERE a.id = 2343243 AND (
SELECT COUNT(*)
FROM posts as p
WHERE p.post_id = a.id AND p.user_id = 3
) = 1;
クエリ1Impossible WHERE
はEXPLAINで返されます。クエリ#2のselect_typeはSUBQUERYです。
EXPLAIN
SELECT a.id
FROM articles as a
WHERE a.id = 2343243 AND (
SELECT COUNT(*)
FROM posts as p
WHERE p.post_id = 2343243 AND p.user_id = 3
) = 1;
クエリ2Impossible WHERE noticed after reading const tables
はEXPLAINで返されます。クエリ2のselect_typeはDEPENDENTSUBQUERYです。
質問:これを不可能ではないWHEREクエリにする方法についてのアイデアはありますか?また、どちらが速いでしょうか?