我有由SID链接的学生和事件表.

 CREATE TABLE `students` (
`sid` int(8) NOT NULL COMMENT 'use',
`active` enum('Yes','No','vac','Grad') NOT NULL DEFAULT 'Yes',
`name` varchar(130) DEFAULT NULL,
`bus` varchar(130) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `students` (`sid`, `LEFT(name, 2)`, `bus`) VALUES
(51, 'Me', 'BusA'),
(52, 'Hi', 'BusA'),
(59, 'An', 'BusA'),
(70, 'Mi', 'BusB'),
(100, 'Yu', 'BusB');

CREATE TABLE `STATevent` (
  `eventid` int(24) NOT NULL,
  `sid` int(4) NOT NULL,
  `date` datetime NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `level` enum('absent','bus') CHARACTER SET utf8 NOT NULL,
  `color` varchar(10) NOT NULL,
  `Percent` tinyint(5) NOT NULL,
  `note` varchar(266) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `STATevent` (`eventid`, `sid`, `date`, `created`, `level`, `color`, `Percent`, `note`) VALUES
(43, 59, '2022-11-30 21:17:04', '2022-11-28 12:17:04', 'bus', 'red', 100, '');

学生可以 Select 不使用公共汽车服务,它显示为一个条目(如上面的EventID43).我可以拿到"公交学生"的名单,还有一个显示谁取消了服务,谁没有取消服务的身份证.

SELECT C.name, C.sid, O.sid AS 'bid', C.bus FROM students C
LEFT JOIN STATevent O ON  C.sid = O.sid
WHERE C.bus LIKE 'Bus%' AND C.active = 'Yes' ;

然而,当我try 将日期限制为where时,结果只显示了取消服务的那个.

SELECT C.name, C.sid, O.sid AS 'bid', C.bus FROM students C
LEFT JOIN STATevent O ON  C.sid = O.sid
WHERE C.bus LIKE 'Bus%' AND C.active = 'Yes' AND O.date LIKE '2022-11-29%';

如何添加此限制器并获得与第一个查询一样的完整结果? 首先要感谢你的帮助.

推荐答案

您可以将对事件日期的限制移至LEFT JOIN的ON子句:

SELECT c.name, c.sid, o.sid AS bid, c.bus
FROM students c
LEFT JOIN STATevent o
    ON o.sid = c.sid AND
       DATE(o.date) = '2022-11-29'
WHERE c.bus LIKE 'Bus%' AND c.active = 'Yes';

对于取消not服务的学生,bid将被报告为空.

Mysql相关问答推荐

根据键的数量,SQL Json字段分为行

MySQL有没有办法直接从CSV文件中读取而不是导入它?

当日期附加到MySQL后,如何按日期说明排序?

将 JSON 类型的列与特定字符串值进行比较

SQL - 基本的内部连接查询

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

如何优化使用多个 LEFT JOIN 和 GROUP BY 子句的慢速 MySQL 查询?

Mysql 中相同列的相关 2 查询

Mysql,显示谁已经和没有 Select 退出巴士服务

为什么没有创建此触发器?

为什么这个 NOT NULL 到 NULL 迁移会触发大量 I/O 操作?

在 SQL 中将列添加为 End_date,间隔为 +100 天

查询给出错误时的 mySQL Group_Concat 和 Case

如何查询打印已售罄的产品? [MYSQL]

最好的 MySQL 性能调优工具?

在 PHP 中获取 MySQL 列的总和

将 mySQL 查询作为 cron 作业(job)运行?

在 MySQL 中签名或未签名

Yii2 如何进行 where AND 或 OR 条件分组?

BIGINT mysql 性能与 INT 相比