我正在执行此查询
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;
我试图从db TABLE USERS中的每个用户获取此查询,并使用子查询选择每个人的UPPER((SELECT USERNAME FROM USERS)))'然后事情是返回结果的多行但是如果我像'ADMIN'那样直接放置USERNAME,例如它给我结果 .
2 回答
你正在做
username=select...
. 在相等性测试中使用的子查询只能返回一个字段/行 . 因为你're going an unfiltered 203282 , you'每次返回一个字段的许多行 . 为此你需要IN
匹配:SQL不允许本质上是什么
这就是
IN
运算符工作的原因,用于比较值集 .这是你的
where
条款:这至少有三个问题 .
UPPER()
的子查询参数可能会返回多个值,并且可能会返回,除非USERS
表有0行或1行 .=
到UPPER()
也有类似的问题 .in
更合适 .在外部
where
子句中使用=
也有类似的问题 .in
更合适 .以下修复了这些问题:
但是,我怀疑这将修复您的整体查询 . 您对SQL的了解似乎有点受限 . 我建议你提出另一个问题,提供样本数据,想要的结果,并解释你想做什么 . 这将使本网站上知识渊博的人更容易指出您正确的方向来编写您的查询 .