[英]MySQL subquery returns more than one row selecting count with subquery
我正在執行此查詢
SELECT COUNT(*) AS CONNECTIONS, SERVERS.NAME AS SERVER_NAME, USERS.USERNAME AS USER, CONECT_DATE AS CONNECTION_DATE
FROM CONECTIONS JOIN SERVERS ON(CONECTIONS.SERVERID = SERVERS.ID)
JOIN USERS ON (CONECTIONS.USERID = USERS.ID)
WHERE CONECTIONS.USERID = (SELECT ID FROM USERS
WHERE UPPER(USERNAME) = UPPER((SELECT USERNAME FROM USERS)))
AND CONECT_DATE BETWEEN '2010-06-11' AND '2019-06-11'
GROUP BY SERVERID, CONECT_DATE;
我試圖從數據庫表用戶中的每個用戶獲取此查詢,並進行子查詢以選擇所有人'UPPER((SELECT USERNAME FROM USERS)))',結果是返回的結果超過一行例如,直接輸入USERNAME之類的“ ADMIN”即可得到結果。
您正在執行username=select...
相等性測試中使用的子查詢只能返回一個字段/行。 由於要進行未經過濾的“將用戶表中的所有內容都給定”,因此您將返回許多一個字段的許多行。 為此,您需要一個IN
匹配項:
SELECT ...
WHERE ... UPPER(username) IN (SELECT USERNAME FROM users)
^^^^---this
SQL不允許本質上是什么
WHERE foo=1,2,3,4,5,6
這就是IN
運算符用於比較值集的原因。
這是您的where
子句:
WHERE CONECTIONS.USERID = (SELECT ID
FROM USERS
WHERE UPPER(USERNAME) = UPPER((SELECT USERNAME FROM USERS))
)
這至少有三個問題。
UPPER()
的子查詢參數可能返回多個值,並且可能會返回多個值,除非USERS
表具有0或1行。 UPPER()
的=
有類似的問題。 一個in
更合適。 where
子句中使用=
存在類似的問題。 一個in
更合適。 以下內容解決了這些問題:
WHERE CONECTIONS.USERID IN (SELECT ID
FROM USERS
WHERE UPPER(USERNAME) IN (SELECT UPPER(USERNAME) FROM USERS))
)
但是,我懷疑這是否可以解決您的整體查詢。 您對SQL的了解似乎有限。 我建議您再問一個問題,提供樣本數據,所需的結果並解釋您想做什么。 這將使該站點上有知識的人更容易為您指出正確的方向來編寫查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.