2017-11-10 6 views
-1

Ich habe einige Tabellen:SQL: Daten aus einer Tabelle, die nicht Wert aus einer anderen Tabelle enthält

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

Ich brauche weicht WEEK, um herauszufinden, ist nicht in der student_avaliation Tabelle basierend auf dem Datum. Was soll ich zum Beispiel tun, um zu wissen, welche Woche wo nicht registriert wurde? Wo ist die Woche? '14/11/2017 '?

Ich weiß, dass ich NOT EXISTS verwenden muss, aber ich weiß nicht, wie es geht.

Kann mir jemand helfen?

+0

Sie etwas posten Möchten Sie versucht haben, oder zumindest der Auswahl ohne die NICHT EXISTEN? – Vinnie

+0

Veröffentlichen Sie die Tabellen und Daten als Text [LESEN SIE DIESE] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking) -a-question/285557 # 285557) zu verstehen, warum –

+0

Zeigen Sie uns db Schema, Beispieldaten, aktuelle und erwartete Ausgabe. \t Bitte lesen Sie [** How-to-Frage **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein toller Ort, um [** START **] (http://spaghettiba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie die Qualität Ihrer Fragen verbessern und bessere Antworten erhalten. \t [** So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel **] (http://StackOverflow.com/Help/Mcve) –

Antwort

0

Wenn Sie suchen gerade die Woche zurückzugeben, die nicht registriert wurde, ich glaube, dies wird Ihnen das Ergebnis:

SELECT * 
FROM dbo.[week] w 
WHERE NOT EXISTS (
    SELECT * FROM dbo.student_avaliation sa 
    WHERE w.id = sa.idWeek) 

I verwendet SQLFiddle um die Daten vorzubereiten: http://sqlfiddle.com/#!6/c92c45/5

Hier ist ein weiterer Versuch ... wenn was Sie wollen wissen, ist, ob die Woche (einen Eintrag in der Tabelle student_avaliation) alles registriert hat, dann links verbinden und es aufrollen:

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

nicht viel ändern ... aber Frage verwenden mysql-Tag –

+0

Dank @JuanCarlosOropeza Ich werde das Schema Prep aktualisieren – Vinnie

+1

Es war sehr verwirrt, was ich fragte und wie ich fragte, tut mir leid für das. Aber Ihr Code gab mir, was ich will. Danke für Ihre Hilfe. :) –

0

Ist das etwas, was Sie erreichen möchten? Nur ein zufälliger Versuch.

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

ODER

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

Art von .. Ich muss wissen, welche Woche wurde nicht basierend auf dem Datum registriert .. –

+0

'basierend auf dem Datum müssen Sie erklären Sie Ihre Logik –

Verwandte Themen