У меня есть следующий SQL-запрос:Выберите из присоединяемой таблицы, только если запись существует
SELECT
Customers.CustomerName AS FullName,
Customers.Id AS CustomerId,
Customers.UserRoleId AS UserRoleId,
Customers.Email AS Email,
IFNULL(Customers.StudentId, '') AS CustomersStudentId,
IFNULL(Customers.MagentoId, '') AS MagentoId,
Sections.Id AS SectionId,
Sections.SectionNumber AS SectionNumber,
Sections.SectionName AS SectionName,
Courses.Id AS CourseId,
IFNULL(Courses.CourseName, '') AS CourseName,
IFNULL(Courses.CourseNumber,'') AS CourseNumber,
IFNULL(Courses.CourseDepartment, '') AS CourseDepartment,
IFNULL(Courses.Notes, '') AS CourseNotes,
IFNULL(Courses.Year, '') AS CourseYear,
IFNULL(Courses.CourseType, '') AS CourseType,
StudentsCourses.Id AS StudentsCoursesId,
IFNULL(StudentsCourses.StudentId, '') AS StudentsCoursesStudentId,
IFNULL(SiteProfile.StudentIdField, '') AS StudentIdField,
IFNULL(SiteProfile.SchoolEmailDomain, '') AS SchoolEmailDomain,
IFNULL(Orders.Id, '') AS OrderId
FROM Customers
LEFT JOIN StudentsCourses ON Customers.Id = StudentsCourses.CustomerId
LEFT JOIN Sections ON StudentsCourses.SectionId = Sections.Id
LEFT JOIN Courses ON StudentsCourses.CourseId = Courses.Id
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 Orders ON Customers.Id = Orders.CustomerId
LEFT JOIN SiteProfile ON Courses.SchoolCode = SiteProfile.SchoolCode
WHERE Customers.Id <> 10
AND StudentsCourses.SectionId IS NOT NULL
AND StudentsCourses.Delete <> 2
AND Courses.SchoolCode = '{$criteria["school_code"]}'
AND Courses.Year = {$criteria["year"]}
AND Courses.CourseType LIKE '{$criteria["term"]}'
запись всегда будет существовать в Customers
таблицы. Но иногда в любой из других объединенных таблиц не будет связанных записей.
Как изменить запрос, чтобы дополнительные статьи SELECT
и WHERE
не нарушали результаты, если в таблице Customers
есть только записи?
EDIT:
Если запись существует только в Customers
, я хочу эту запись, и я хочу, чтобы WHERE
положения, которые не относятся к Customers
таблицы следует игнорировать.
Если запись существует в объединенной таблице, я хочу, чтобы статья WHERE
, относящаяся к этой объединенной таблице, работала.
объясните лучше ... пожалуйста .... вы хотите получить только результат, который соответствует таблице клиентов и других, или вы хотите, чтобы оба были. Alias результат для соответствия и для несовпадения между клиентами и другими таблицами? – scaisEdge
Отредактировано с большей ясностью – LXXIII
Переместить ограничение ограничения соединения на записи, не входящие в таблицу клиентов, в соединения. Пример: 'LEFT JOIN StudentsCourses ON Customers.Id = StudentsCourses.CustomerId AND StudentsCourses.SectionId NOT NULL AND StudentsCourses.Delete <> 2' Предел применяется до объединения, таким образом, сохраняя записи клиентов, когда соединение с учениками должно быть недействительным , В большинстве случаев, когда используются внешние соединения, критерии присоединения должны быть выполнены до объединения. ИЛИ вы должны учитывать нули, как это делали другие в ответах ниже. – xQbert