Я посмотрел на кучу похожих вопросов с 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";
Это существует некогерентно, вы нашли, что синтаксис используется где-то или вы просто догадывались? [Документация по СУБД MySQL] (http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html) – Uueerdo
Какое поле должно существовать в таблице2? Можете ли вы опубликовать полный запрос? – Yuri
.. и «бросить пустую строку» для чего? Это булевые условия, а не выбор полей. – Uueerdo