2016-07-12 2 views
0

비슷한 스택 오버 플로우 질문을 살펴 보았지만이 문제를 파악하지 못했습니다. 조건이있는 여러 WHERE 절

    WHERE `Table1`.`Column1` = 'criteria1' 
        AND `Table1`.`Column2` = 'criteria2' 
        AND `Table1`.`Column3` LIKE 'criteria3' 
        AND IF(EXISTS IN `Table2`, (`Table2`.`Delete` <> 2, `Table2`.`SectionId` IS NOT NULL), '') 

나는 마지막 두가 행이 결합 된 표 2에 존재하는 조건에 따라 다섯 개 WHERE 조항으로 쿼리를 실행하기 위해 노력하고있어. 조건이 거짓이면 빈 문자열 ''을 던집니다.

위 코드의 변형을 시도했지만 잘못된 구문입니다. 내가 할 수있는 일이 가능한거야?

WHERE 절 안에 IF를 사용할 수 있습니까?

EDIT (여기에 전체 쿼리의 ...) :

 $sql_query = "SELECT 
        `Courses`.`Id` AS CourseId, 
        IFNULL(`Courses`.`CourseName`, '') AS CourseName, 
        IF(`Courses`.`CourseNumber` > '', `Courses`.`CourseNumber`, -1) AS CourseNumber, 
        IFNULL(`Courses`.`CourseDepartment`, '') AS CourseDepartment, 
        IFNULL(`Courses`.`Notes`, '') AS CourseNotes, 
        IFNULL(`Courses`.`Year`, '') AS CourseYear, 
        IFNULL(`Courses`.`CourseType`, '') AS CourseType, 
        `Sections`.`Id` AS SectionId, 
        IFNULL(`Sections`.`SectionNumber`, '') AS SectionNumber, 
        IFNULL(`Sections`.`SectionName`, '') AS SectionName, 

        `StudentsCourses`.`CustomerId` AS CustomerId, 

        CONCAT(`Courses`.`Id`, '-', `Sections`.`Id`, '-', `StudentsCourses`.`FirstName`, `StudentsCourses`.`LastName`, '_', `StudentsCourses`.`TeacherEmail`) AS TempCustomerId, 
        IFNULL(`StudentsCourses`.`FirstName`, '') AS StudentFirstName, 
        IFNULL(`StudentsCourses`.`LastName`, '') AS StudentLastName, 
        IFNULL(`Customers`.`Email`, IFNULL(`StudentsCourses`.`StudentEmail`, '')) AS StudentEmail, 
        IFNULL(`StudentsCourses`.`TeacherFirstName`, '') AS TeacherFirstName, 
        IFNULL(`StudentsCourses`.`TeacherLastName`, '') AS TeacherLastName, 
        IF(`StudentsCourses`.`CustomerId` IS NOT NULL, `Customers`.`CustomerName`, CONCAT(`StudentsCourses`.`FirstName`, ' ', `StudentsCourses`.`LastName`)) AS FullName, 
        IF(`StudentsCourses`.`CustomerId` IS NOT NULL, CONCAT(REPLACE(`Customers`.`CustomerName`, ' ', ''), '_', `Customers`.`Email`), CONCAT(`StudentsCourses`.`FirstName`, `StudentsCourses`.`LastName`, '_', `StudentsCourses`.`TeacherEmail`)) AS NameKey, 
        `Customers`.`UserRoleId` AS UserRoleId, 
        `Customers`.`MagentoId` AS MagentoId, 
        `StudentsCourses`.`StudentId` AS StudentId, 
        `SiteProfile`.`StudentIdField` AS StudentIdField, 
        `SiteProfile`.`SchoolEmailDomain` AS SchoolEmailDomain, 
        `StudentsCourses`.`Id` AS StudentsCoursesId, 
        IFNULL(`Orders`.`Id`, '') AS OrderId 
       FROM `Courses` 
        LEFT JOIN `StudentsCourses` ON `Courses`.`Id` = `StudentsCourses`.`CourseId` 
        LEFT JOIN `BooksCourses` ON `Courses`.`Id` = `BooksCourses`.`CourseId` 
        LEFT JOIN `Products` ON `BooksCourses`.`ISBN` = `Products`.`ISBN` 
        LEFT JOIN `EbookVendors` ON `Products`.`EbookVendorId` = `EbookVendors`.`Id` 
        LEFT JOIN `Sections` ON `Sections`.`Id` = `StudentsCourses`.`SectionId` 
        LEFT JOIN `Customers` ON `StudentsCourses`.`CustomerId` = `Customers`.`Id` 
        LEFT JOIN `SiteProfile` ON `Courses`.`SchoolCode` = `SiteProfile`.`SchoolCode` 
        LEFT JOIN `Orders` ON `Customers`.`Id` = `Orders`.`CustomerId` 

        WHERE `Courses`.`SchoolCode` = '{$criteria["school_code"]}' 
        AND `Courses`.`Year` = {$criteria["year"]} 
        AND `Courses`.`CourseType` LIKE '{$criteria["term"]}' 
        AND `StudentsCourses`.`Delete` <> 2 
        AND `StudentsCourses`.`SectionId` IS NOT NULL"; 
+0

존재하는 것은 일관성이 없습니다. 구문을 어딘가에서 사용했거나 추측 했습니까? [EXISTS 용 MySQL 문서] (http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html) – Uueerdo

+0

Table2에 어떤 필드가 있어야합니까? 전체 쿼리를 게시 할 수 있습니까? – Yuri

+0

.. 그리고 "빈 문자열을 던져라"무엇 때문에? 이는 부울 조건이며 필드 선택은 아닙니다. – Uueerdo

답변

1

당신이 묻는 정확히 매우 명확하지 않다,하지만이 조건이 당신이 무엇을 할 수 같은 것을 추측하고있다

AND (StudentCourses.CourseId IS NULL 
    OR (`StudentsCourses`.`Delete` <> 2 
     AND `StudentsCourses`.`SectionId` IS NOT NULL 
     ) 
    ) 

편집 : 찾고는 것이 가장 당신은 전혀 의도가 한건데에서 무엇인지 분명하지 않다대로 조건이 수행 할 작업을 일반 언어로 설명하는 질문을 편집 한 경우 원래 제시 한 ntax.

+0

이것은 아마도 맞을지 모르지만 그것은 나를 위해 일하지 않았다. 내 전체 쿼리를 다시 작성해야한다고 생각합니다. – LXXIII