【发布时间】:2020-09-28 23:23:46
【问题描述】:
我编写了以下查询,其中我在 server 列上使用 groupby 子句
select s.server, MAX(s.ipAddress) as ipAddress,
MAX(r.stacks->>"$[0].name") as stackName,
MAX(a.aMessage) as aMessage
from environments e
inner join servers s
on e.objectId = s.environmentId
inner join resources r
on e.objectId = r.environmentId
inner join audits a
on a.id = (select max(a.id) from audits a where a.logObjId = s.cAudit)
WHERE dateSubmitted BETWEEN NOW() - INTERVAL 90 DAY AND NOW()
Group by s.server
ORDER BY dateSubmitted;
但是,server 列可能具有 NULL 值,并且具有有效的 ipAddress 和 stackName。
如何修改查询,以免遗漏所有NULL server 列值。
预期样本数据:
server ipAddress stackName aMessage
NULL NULL Stack A Searching for IP pool
NULL NULL Stack B Message XYZ
NULL NULL Stack A Message ABC
【问题讨论】:
-
我怀疑是您的内部联接正在删除空值,而不是您的 group by。考虑将它们改为
LEFT OUTER JOIN。 -
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
-
在这种情况下同意@philipxy。示例数据在这里会有很长的路要走,而且由于涉及到这么多表,因此示例数据可能是绝对必要的,以使您的问题可重现。
-
推测您的服务器空值与内部连接相等性中提到的列中的空值出现在相同的行中,但是对于这些相等性为真并且要在连接中的行,列必须是非-null。
-
在哪里?有 4 个表,它们没有样本数据。您需要做的是“简化它”(一次加入一个)并在进行过程中对其进行测试......
标签: mysql join select group-by inner-join