CREATE TABLE `entidade_pessoa_avaliacao` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idEntidade_pessoa` int(10) unsigned NOT NULL,
`idSemana` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idEscola_Matriculado_idSemana` (`idEntidade_pessoa`,`idSemana`),
KEY `idEscola_Matriculado` (`idEntidade_pessoa`),
KEY `idSemana` (`idSemana`),
CONSTRAINT `FK_smsescola_escola_acao_smsescola_escola_matriculado` FOREIGN KEY (`idEntidade_pessoa`) REFERENCES `entidade_pessoa` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_smsescola_escola_matriculado_avaliacao_smsescola_semana` FOREIGN KEY (`idSemana`) REFERENCES `semana` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8;
INSERT INTO `entidade_pessoa_avaliacao` (`id`, `idEntidade_pessoa`, `idSemana`) VALUES
(1, 1, 1),
(2, 2, 1),
(3, 3, 1),
(4, 1, 2),
(5, 2, 2),
(6, 3, 2);
CREATE TABLE `semana` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nome_curto` varchar(250) NOT NULL,
`inicio` date NOT NULL COMMENT,
`termino` date NOT NULL COMMENT,
`idDimensao` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `idDimensao` (`idDimensao`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
INSERT INTO `semana` (`id`, `nome_curto`, `inicio`, `termino`) VALUES
(1, 'Faltas', '2017-10-24', '2017-11-14'),
(2, 'Tarefas','2017-11-07', '2017-11-14'),
(3, 'Participacao','2017-11-07', '2017-11-14');
如何根据日期获取哪一周不在 student_avaliation 表中?
例如,哪一周没有登记在哪里
week.end='14/11/2017'
.
我必须使用 NOT EXISTS 但我不知道如何使用。
如果您想返回未注册的那一周:
SELECT *
FROM dbo.[week] w
WHERE NOT EXISTS (
SELECT * FROM dbo.student_avaliation sa
WHERE w.id = sa.idWeek)
SQLFiddle准备数据: http://sqlfiddle.com/#!6/c92c45/5
要知道本周是否有任何注册(
student_avaliation
表中的条目),左加入并汇总:
SELECT w.id
, w.start
, w.[end]
, w.name
, CASE WHEN sa.id is null then 'Not Registered' else 'Registered' end as WeekRegistered
FROM dbo.[week] w
LEFT JOIN dbo.student_avaliation sa
ON w.id = sa.idWeek
GROUP BY w.id
, w.start
, w.[end]
, w.name
, CASE WHEN sa.id is null then 'Not Registered' else 'Registered' end
ORDER BY w.id
SELECT * FROM (SELECT A.ID,A.START,A.ENDDATE,B.ID Z FROM WEEK A
LEFT OUTER JOIN student_avaliation B
ON A.ID=B.IDWEEK) AA
WHERE AA.Z IS NULL
AND AA.ENDDATE='14/11/2017';
或
select a.* from week a where not exists (select * from student_avaliation b
where a.id=b.idweek);