問題是如何找到內部查詢返回的行的總數,但仍然使用由內部查詢返回的集合(不重複相同的查詢兩次)。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