Mysql GroupBy子句删除所有空列值
我编写了以下查询,其中我在Mysql GroupBy子句删除所有空列值,mysql,join,select,group-by,inner-join,Mysql,Join,Select,Group By,Inner Join,我编写了以下查询,其中我在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.o
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
列可能具有有效的ipAddress
和stackName
的NULL
值
如何修改查询,以使所有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
似乎用于
JOIN
的internal JOIN
表将NULL
值从结果中删除。因此,只需修改查询。试试这个,看看你是否能看到Server
表中的所有数据,这样NULL
数据也会出现在Server
列中
select s.server, MAX(s.ipAddress) as ipAddress,
MAX(r.stacks->>"$[0].name") as stackName,
MAX(a.aMessage) as aMessage
from servers s
left join environments e
on e.objectId = s.environmentId
left join resources r
on e.objectId = r.environmentId
left 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;
我怀疑是您的内部联接删除了空值,而不是您的分组方式。考虑将这些代码转换为<代码>左外部连接< /代码>。请在代码问题中给出剪切和粘贴和可运行代码,包括最小代表性示例输入作为代码;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。暂停对总体目标的工作,将代码切掉到第一个表达式,不要给出你期望的内容,说出你期望的内容和原因。在这种情况下,同意@philipxy。样本数据在这里会有很长的路要走,因为涉及到这么多的表,所以样本数据可能是绝对必要的,以使您的问题具有可复制性。可能您的服务器空值与内部联接等式中提到的列中的空值出现在同一行中,但如果这些等式是真的&联接中的一行,列必须是非空的。在哪里?共有4个表,没有它们的示例数据。您需要做的是“使其静音”(一次加入一个),并在运行时对其进行测试…这仍然不起作用,因为我只看到一行
server
asNULL