【发布时间】:2012-08-13 12:22:27
【问题描述】:
似乎我在 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;
查询 1 在 EXPLAIN 中返回 Impossible WHERE。
查询 #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;
查询 2 在 EXPLAIN 中返回 Impossible WHERE noticed after reading const tables。
查询 2 的 select_type 是 DEPENDENT SUBQUERY。
问题:关于如何使这不是不可能的 WHERE 查询的任何想法?还有,哪个更快?
【问题讨论】:
标签: mysql database select where