mysql - 当不存在 max() 时,在 MYSQL 中将 max() 设置为 null

标签 mysql

我遇到了 SQL 问题。我目前正在开发一个网站,该网站内置了一个吉他调音器。用户可以创建乐器并存储有关其调音的信息。问题是,如果用户创建新的工具,网站上会有一个表格向他们显示他们创建的工具。然而,只有在记录为调谐后,该乐器才会出现。

这是 SQL 存储过程的问题。我将表中的调音日期设置为最大,这意味着如果乐器尚未调音,它将不会显示。 日期在 MYSQL 中设置为 DATETIME

存储过程如下所示。

CREATE DEFINER=`root`@`localhost` PROCEDURE `selectallinstruments`()
BEGIN
SELECT b.Username, a.Name, a.Type, a.ID, max(c.Date) as lasttuned
FROM instruments a, Users b, instrumenttuner c
WHERE a.Users_ID = b.ID and c.Instrument_ID = a.ID
group by a.ID order by b.ID asc, a.ID asc;
END

当仪器没有记录时,有没有办法使lasttuned在这种情况下等于null,以便表在创建仪器时打印没有附加日期记录的仪器。

最佳答案

切勿FROM子句中使用逗号。 始终使用明确、正确的JOIN语法。

您想要的是LEFT JOIN:

select u.Username, i.Name, i.Type, i.ID, max(c.Date) as lasttuned
from instruments i left join
     users u
     on i.users_ID = u.ID left join
     instrumenttuner it
     on it.Instrument_ID = i.ID
group by i.ID
order by u.ID asc, i.ID asc;

一般来说,您要小心 SELECT 中的列不在 GROUP BY 中。在这种情况下,这是可以的,因为您是按表的主键聚合并使用该表中的其他列或主键的唯一列。

关于mysql - 当不存在 max() 时,在 MYSQL 中将 max() 设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42718509/

相关文章:

mysql - PHP Mysqli 向列插入 POINT

android - 如何在 asynctask onPostExecute 上从服务器的 imageview 上显示图像?

Mysql 查询检查两列之间的单个日期时间值

php - 如何在 MySQL 中创建区分大小写的 'select' 和 'like'?

MySQL 查询为每个条目添加字符

mysql - 如何将数据限制为仅最后 5 个结果

mysql - 获取托管在 MySQL 服务器上的数据库

mysql - SQL:通过SQL-Query获取电表每天/每周/每月的消耗量

mysql - 建议合适的mysql日期函数

php表单为特定名称上传多个图像