2016-10-28 2 views
0

가입 할 수 있습니다.는이 코드를

내가하고 싶은 것은 left join을 사용하기 전에 'geometry'설명으로 챕터 테이블을 필터링하는 것입니다. 다음과 같은 코드 뒤에 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

당신의 DBMS와 태그, 또한 쿼리의 예상 결과와 함께, 샘플 데이터를 제공하십시오 것입니다. – MJH

+2

코드가 정확합니다. 오라클을 사용하는 경우 - UPPER (c.desc) = 'GEOMETRY''를 사용하십시오 –

+0

샘플 입력과 원하는 출력은 무엇입니까? – Teja

답변

2

게시 한 것처럼 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 옵티마이 저가이를 실행하는 방법은 DBMS 옵티 마이저에 달려 있습니다. 원래 쿼리와 같은 방법 일 수 있습니다. 그 계획에 대한 설명이 필요합니다.

+0

선생님, 전 SQL 서버 – ABCDE

2

이 항목을 사용해보십시오.

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

이 '형상'과 일치 NULL이됩니다 남아

+1

이미 사용하고 있습니다. 그러나 작동하지 않았다. 난 정말 왼쪽 조인을 사용하여 첫 번째 테이블을 필터링 할 수 있다고 생각합니다. 걱정하지 마라. 나는 이미 내 문제에 대한 대안을 찾았다. 고마워요! – ABCDE

+1

_ "이미 대안 솔루션을 발견했습니다"_ - 당신은'desc = "geometry"'로'lessons'을 필터링하기 시작 했습니까? –

+0

이것은 원래 디자인과 다르지 않습니다. –