我有这段代码:
SELECT
c.ChapterNo, l.LessonNo
FROM
Chapter c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo
返回章节表中的所有行,即使在课程表中没有类似的值。
我想要做的是按照描述'几何'来过滤章节表。在使用left join
之前。我在代码之后使用了where
- 子句:
SELECT
c.ChapterNo, l.LessonNo
FROM
Chapter c LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo
WHERE
c.desc = 'geometry'
但它不会返回任何内容。
另外,我正在编写与VB.NET中的程序连接的SQL代码。
答案 0 :(得分:3)
如果您正在使用Sql Server,就像您发布的那样,您不应该遇到区分大小写的问题。您的查询是正确的,您必须没有c.desc = 'geometry'
您还询问了如何在加入之前过滤查询。您可以使用内联查询
来完成SELECT
c.ChapterNo, l.LessonNo
FROM
(SELECT * FROM Chapter WHERE c.desc = 'geometry') c
LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo
这样你就可以在加入前真正过滤章节了。但是,DBMS优化器如何执行它。可能与原始查询的方式相同 - 请参阅解释计划
答案 1 :(得分:2)
请试试这个。
SELECT
c.ChapterNo, l.LessonNo
FROM
Chapter c
LEFT JOIN Lesson l ON c.ChapterNo = l.ChapterNo AND c.desc = 'geometry'
这将匹配'geometry',剩余将为NULL