你彷彿被詢問這可能會回答的信信息,但是不是制定查詢的非常明智的方式:
SELECT c.numusers, n.type, n.name
FROM (SELECT "new" AS type, name FROM newUsers WHERE name LIKE '%John%') AS n
JOIN (SELECT COUNT(*) AS numusers FROM newUsers WHERE name LIKE '%John%') AS c
UNION
SELECT c.numusers, o.type, o.name
FROM (SELECT "old" AS type, name FROM oldUsers WHERE name LIKE '%John%') AS o
JOIN (SELECT COUNT(*) AS numusers FROM oldUsers WHERE name LIKE '%John%') AS c
ORDER BY 1 ASC LIMIT 1, 10
這裏唯一的奇怪之處在於兩個表之間沒有連接條件(既不是ON也不是USING子句)。您可能需要使用CROSS JOIN而不是(INNER)JOIN;或者,您可以將一列"new" AS type
引入計數查詢,並加入ON n.type = c.type
。然後,您可能需要添加一個GROUP BY子句 - 在大多數DBMS中,您將需要它,但是MySQL可能會讓您在沒有它的情況下離開。
不過,我想你會與兩個單獨的查詢做的更好 - 一個是類型和名稱,如你的問題,其他如:
SELECT COUNT(*) AS numusers, "new" AS type
FROM newUsers
WHERE name LIKE '%John%'
GROUP BY type
UNION
SELECT COUNT(*) AS numusers, "old" AS type
FROM oldUsers
WHERE name LIKE '%John%'
GROUP BY type;
假設你正在使用MySQL,你可能會能夠在第二個查詢中沒有GROUP BY子句的情況下離開。
你真的在做什麼? 「新約翰」行的數量及其細節數加上「舊約翰」行數及其細節的數量,但總共只需要10行?我認爲你把兩個不同的查詢混合得太徹底了;您可能需要運行兩個單獨的查詢 - 一個用於獲取兩個值(新的數字和舊的「John」條目的數量),另一個用於獲取有關舊約或新約翰行的最多10行信息。 –
@Jonathan,你猜猜我想要什麼是正確的。我試圖獲得計數的原因是顯示必須經過以顯示所有項目的頁面數量(假設每頁有10個項目)。 – MarkL