2016-07-12 2 views
0

Я посмотрел на кучу похожих вопросов с stackoverflow, но я не смог понять это.Несколько предложений 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), '') 

Я пытаюсь выполнить запрос с пятью WHERE пунктами, где последние две основаны на том условии, что строка существует в соединенном Table2. Если условие ложно, введите пустую строку ''.

Я пробовал варианты вышеуказанного кода, но это неправильный синтаксис. Это то, что я пытаюсь сделать возможным?

Могу ли я использовать IF внутри предложения WHERE?

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

Это существует некогерентно, вы нашли, что синтаксис используется где-то или вы просто догадывались? [Документация по СУБД MySQL] (http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html) – Uueerdo

+0

Какое поле должно существовать в таблице2? Можете ли вы опубликовать полный запрос? – Yuri

+0

.. и «бросить пустую строку» для чего? Это булевые условия, а не выбор полей. – Uueerdo

ответ

1

Это не очень понятно, что именно вы просите, но я предполагаю, что-то как это условие может быть то, что вы ищет:

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

Edit: было бы лучше, если вы редактировали свой вопрос, чтобы объяснить простым языком, что вы хотите условие, чтобы сделать, так как это не очевидно, на все, что намерение было из синте ntax, который вы изначально представили.

+0

Возможно, это правильно, но это не сработало для меня. Я думаю, что весь мой запрос нужно переделать. – LXXIII

Смежные вопросы