mariadb MAX查询返回空值,即使有数据

epggiuax  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(149)

我遇到了一个问题,当使用max命令查询时,数据没有列出(没有受影响的行),但没有max命令,没有问题(显示2行),列出了数据。有人知道根本原因吗?我使用的是10.1.30-MariaDB。这是问题命令;

SELECT ib.Id AS 'IB_RecID' 
FROM (csm_installbase ib
    LEFT JOIN systeminformation si1 ON ((si1.IB_RecID = ib.Id))
) 
WHERE (si1.Id IN (SELECT MAX(si3.Id) 
                  FROM systeminformation si3 
                  GROUP BY si3.IB_RecID))

列出的数据不带max命令;

SELECT ib.Id AS 'IB_RecID' 
FROM (csm_installbase ib
        LEFT JOIN systeminformation si1 ON ((si1.IB_RecID = ib.Id))
    ) 
WHERE (si1.Id IN (SELECT si3.Id 
                  FROM systeminformation si3 
                    GROUP BY si3.IB_RecID)
)

我尝试使用LIMIT,但提示“此版本的MySQL尚不支持'LIMIT & IN/ALL/ANY/SOME子查询”错误框。
提前感谢您的任何帮助和努力。

5sxhfpxr

5sxhfpxr1#

测试下一个查询:

SELECT t1.Id AS 'IB_RecID' 
FROM csm_installbase t1
JOIN systeminformation t2 ON t2.IB_RecID = t1.Id
JOIN ( SELECT MAX(Id) Id
       FROM systeminformation t3
       GROUP BY IB_RecID ) t4 ON t2.Id = t4.id

对于你的意见左联接和内部联接。我应该替换什么?实际上左联接有10+从另一个表,但跳过它作为不相关。我应该添加内部联接为它?- nurul
您的正式查询是:

...
FROM t1
LEFT JOIN t2 ON {condition}
WHERE t2.column = {value}
...

什么是左联接?
它取t1中的所有行,并将t2中与{condition}匹配的行添加到每行。然后,对于t1中在t2中没有匹配行的每行,它将NULL添加到所有相应的列中。
然后应用WHERE中的条件,将t2中的列与某个值进行比较。但对于t1中的行,如果在t2中没有匹配的行,则将为WHERE NULL = {value}。此表达式将生成NULL,并将其视为FALSE。因此,将从行集中删除所有此类行。只有t1中的行与t2中的行匹配时,才可能返回这些行。因此,在这种情况下,LEFT JOIN充当INNER JOIN。并且可以编辑此联接类型。
如果有其他的连接,那么你可以用同样的逻辑来研究它们。也许其他的外部连接实际上也是内部连接。

相关问题