问题是如何找到内部查询返回的行的总数,但仍然使用由内部查询返回的集合(不重复相同的查询两次)。MySQL:计算子查询的结果并仍然使用它返回的集合
我有一个查询:
SELECT a1.name as name
FROM
(
SELECT b1.id as id
FROM b1 JOIN b2 JOIN b3 ...
WHERE b1.x = ... AND ...
) as ids
JOIN a1 ON a1.id = ids.id
JOIN a2 ON a2.id = ids.id AND ...
JOIN a3 ON a3.id = ids.id AND ...
WHERE a1.name = 'apple' AND a2.name = 'orange' AND a3.name = 'pear'
UNION
SELECT the same query but with 'cat', 'dog', 'mouse'
UNION
SELECT the same query but with 'python', 'perl', 'java'
ORDER BY name
与多个表和复杂的条件,其中该组ID的在子查询中被选择。
我想知道两个不同的东西:由大的查询,它使用一组特定的ID
- 值:很多标识是如何考虑,即使在外部查询中不匹配。
表格很大,所以问题不在于如何找到信息,而是如何有效地做到这一点。假设执行内部查询两次,一次作为子查询,一次只用于计数,可能会太慢。
我可以在一个查询中找到两种类型的信息吗?
名称的ORDER是独立于ID,所以我想我不能GROUP BY a1.id因此不能使用COUNT DISTINCT a1.id.
你能不能''选择b1.id作为id,count(*)作为reccount ... where ... group by id'作为内部查询吗?然后,您应该能够根据需要使用来自内部查询的计数。 – zedfoxus
@zedfoxus如果我正确地测试了它,当我使用'count(*)'时,内部查询只给出了一行。这是真的吗?听起来似乎是合理的,因为找到“count(*)”它需要工作直到找到最后一行。 –
如果表中只有1个ID,则可能导致1行。否则,它应该给你唯一的ID和他们的计数。如果您熟悉sqlfiddle.com,我建议使用虚拟数据创建表格结构并编辑链接和预期结果。这将有助于回答问题 – zedfoxus