看来我在 SELECT 查询上得到了“不可能的 WHERE”。我在下面发布了两个查询,它们在子查询中有所不同。这些查询所做的是在更新计数之前检查用户之前是否保存过一次内容。我将 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;
以下两个查询是我用来测试数据是否在表中的查询(仅用于测试):
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 中返回。Query 2的select_type是 DEPENDENT SUBQUERY。
问题:关于如何使这不是不可能的 WHERE 查询的任何想法?而且,哪个会更快?