So filtern Sie die erste Tabelle, bevor Sie die linke Verknüpfung verwenden

Ich habe diesen Code:

SELECT c.ChapterNo, l.LessonNo FROM Chapter c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo 

die alle Zeilen in der Kapiteltabelle auch ohne ähnlichen Wert in der Unterrichtstabelle zurückgibt.

was ich tun möchte, ist, die Kapiteltabelle durch die Beschreibung 'Geometrie' zu filtern, bevor du die left join . Ich habe die where Klausel nach dem Code wie folgt verwendet:

 SELECT c.ChapterNo, l.LessonNo FROM Chapter c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo WHERE c.desc = 'geometry' 

aber es gibt nichts zurück.

Außerdem schreibe ich den SQL-Code, der mit meinem Programm in VB.NET verbunden ist.

Wenn Sie Sql server verwenden, wie Sie gepostet haben, sollten Sie keine Probleme mit der Groß- / Kleinschreibung beachten. Ihre Frage ist richtig und Sie müssen einfach keine Kapitel haben wo c.desc = 'geometry'

Sie haben auch gefragt, wie Sie die Abfrage vor dem Beitritt filtern können. Sie können es tun, indem Sie Inline-Abfrage verwenden

 SELECT c.ChapterNo, l.LessonNo FROM (SELECT * FROM Chapter WHERE c.desc = 'geometry') c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo 

Auf diese Weise können Sie wirklich Kapitel vor dem Beitritt filtern. Allerdings ist es bis zu DBMS-Optimierer, wie es es ausführt. Kann genau so sein wie die ursprüngliche Abfrage – gotta see erklären Plan dafür

Probieren Sie mal das hier an.

 SELECT c.ChapterNo, l.LessonNo FROM Chapter c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo AND c.desc = 'geometry' 

Dies wird mit "Geometrie" übereinstimmen und verbleibend wird NULL sein