[英]How can I store the result of a query into a variable and use it multiple times?
[英]How to use result of an subquery multiple times into an query
MySQL查詢需要不同位置的子查詢結果,如下所示:
SELECT COUNT(*),(SELECT hash FROM sets WHERE ID=1)
FROM sets
WHERE hash=(SELECT hash FROM sets WHERE ID=1)
and XD=2;
有沒有辦法避免子查詢的雙重執行(SELECT hash FROM sets WHERE ID=1)
? 子查詢的結果始終返回有效的哈希值。 重要的是主查詢的結果還包括HASH。
首先我嘗試了這樣的JOIN
:
SELECT COUNT(*), m.hash FROM sets s INNER JOIN sets AS m
WHERE s.hash=m.hash AND id=1 AND xd=2;
如果XD = 2與行不匹配,則結果為:
+----------+------+
| count(*) | HASH |
+----------+------+
| 0 | NULL |
+----------+------+
而不是像(我需要的):
+----------+------+
| count(*) | HASH |
+----------+------+
| 0 | 8115e|
+----------+------+
有任何想法嗎? 請告訴我! 預先感謝您的任何幫助。
//編輯:最后該查詢只需計算表中具有相同散列值的所有條目,如ID = 1且XD = 2的條目。 如果沒有行匹配(如果XD設置為其他數字,則發生此情況),因此返回0並簡單地哈希值。
SELECT SUM(xd = 2), hash
FROM sets
WHERE id = 1
如果id
是PRIMARY KEY
(我假設它是因為你正在使用單記錄查詢),那么你可以刪除SUM
:
SELECT xd = 2 AS cnt, hash
FROM sets
WHERE id = 1
更新:
對不起,你的任務錯了。
嘗試這個:
SELECT si.hash, COUNT(so.hash)
FROM sets si
LEFT JOIN
sets so
ON so.hash = si.hash
AND so.xd = 2
WHERE si.id = 1
我通常將語句嵌套如下
SELECT Count(ResultA.Hash2) AS Hash2Count,
ResultA.Hash1
FROM (SELECT S.Hash AS Hash2,
(SELECT s2.hash
FROM sets AS s2
WHERE s2.ID = 1) AS Hash1
FROM sets AS S
WHERE S.XD = 2) AS ResultA
WHERE ResultA.Hash2 = ResultA.Hash1
GROUP BY ResultA.Hash1
(這個是手動輸入而未經過測試,但你應該明白這一點)Hash1是你的子查詢,一旦它嵌套,你可以通過它在外部查詢中的別名來引用它。 它使查詢更大,但我不認為這是一個巨大的。
如果我正確理解您要獲取的內容,查詢應如下所示:
select count(case xd when 2 then 1 else null end case), hash from sets where id = 1 group by hash
我同意其他答案,即GROUP BY可能更好,但回答提出的問題,這里是如何消除重復:
SELECT COUNT(*), h.hash
FROM sets, (SELECT hash FROM sets WHERE ID=1) h
WHERE sets.hash=h.hash
and sets.ID=1 and sets.XD=2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.