2017-11-10 18 views
-1

から値が含まれていないテーブルからデータを選択:SQL:私はいくつかのテーブルを持っている別のテーブル

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'); 

私はウィッヒWEEK把握する必要があり、日付に基づいてstudent_avaliationテーブルではありません。たとえば、week.end = '14/11/2017 'のどこに登録されていない週があるか知るにはどうすればよいですか?

私はNOT EXISTSを使用する必要があることを知っていますが、それを行う方法はわかりません。

誰でも手伝ってもらえますか?

+0

あなたが試したものを掲載、または少なくとも選択することになります存在しない人はいない? – Vinnie

+0

テーブルとデータをテキストとして投稿[READ THIS](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking -a-question/285557#285557)理由を理解する –

+0

私たちにdbスキーマ、サンプルデータ、現在および予想される出力を表示します。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 \t [**最小限の完全かつ検証可能なサンプルを作成する方法**](http://stackoverflow.com/help/mcve) –

答えて

0

あなただけ登録されていなかった週を返すために探しているなら、私はこれがあなたに結果を与えると信じて:

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 
+0

多くの変更はありませんが、質問にはmysqlタグを使用してください –

+0

ありがとうございます@JuanCarlosOropeza – Vinnie

+1

私は尋ねたものと尋ねたことはとても混乱しました。 :) –

0

達成しようとしていることはありますか?ただランダムに試してみてください。

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'; 

OR

select a.* from week a where not exists (select * from student_avaliation b 
where a.id=b.idweek); 
+0

種類..日付に基づいて登録されていない週を知る必要があります。 –

+0

あなたのロジックを説明してください –

関連する問題