簡體   English   中英

如何在查詢中多次使用子查詢的結果

[英]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

如果idPRIMARY 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM