existiert Ich habe die folgende SQL-Abfrage:nur, wenn Datensatz
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"]}'
Records existieren immer in der Customers
Tabelle. Aber manchmal gibt es keine verknüpften Datensätze in den anderen verbundenen Tabellen.
Wie ändere ich die Abfrage, so dass die zusätzlichen SELECT
und WHERE
Klauseln nicht die Ergebnisse brechen, wenn nur Datensätze in der Customers
Tabelle sind?
EDIT:
Wenn der Datensatz nur in Customers
vorhanden ist, möchte ich, dass Datensatz und ich möchte, dass die WHERE
Klauseln, die dem Customers
Tabelle beziehen sich nicht ignoriert werden.
Wenn der Datensatz in einer Joined-Tabelle vorhanden ist, möchte ich die WHERE
-Klausel, die zu dieser verknüpften Tabelle gehört.
erklären besser ... bitte .... Sie wollen nur das Ergebnis, dass die Übereinstimmung zwischen Kunden und anderen Tabelle oder Sie wollen beide .... alias das Ergebnis für die Übereinstimmung und für nicht übereinstimmen zwischen Kunden und anderen Tabellen? – scaisEdge
Bearbeitet mit mehr Übersichtlichkeit – LXXIII
Verschieben Sie die Join-Einschränkungs-Kriterien für Datensätze, die nicht in der Kundentabelle enthalten sind, zu den Joins. Beispiel: 'LEFT JOIN StudentsCourses ON Kunden.Id = StudentsCourses.CustomerId UND StudentsCourses.SectionId IST NICHT NULL AND StudentsCourses.Delete <> 2' Das Limit wird vor dem Join angewendet, wodurch die Kundendatensätze beibehalten werden, wenn der Join zu studentsCourses null ist . In den meisten Fällen müssen bei Verwendung von Outer-Joins die Join-Begrenzungskriterien vor dem Join ausgeführt werden. ODER Sie müssen Nullen berücksichtigen, wie andere unten in den Antworten getan haben. – xQbert