を存在する場合にのみ、私は次の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
テーブルに存在します。しかし、時には、他の結合されたテーブルのいずれにも関連するレコードはありません。
Customers
テーブルにレコードしかない場合、追加のSELECT
とWHERE
句が結果を破らないようにクエリを変更するにはどうすればよいですか?
はEDIT:
レコードが唯一Customers
に存在し、私はそのレコードをしたいと私はCustomers
テーブルに関連していないWHERE
句が無視されたいです。
レコードが結合テーブルに存在する場合は、その結合テーブルに関係するWHERE
句を使用します。
説明してください....お客様と他のテーブルの間で一致する結果のみを必要とするか、両方ともしたいですか?エイリアス結果と顧客と他のテーブルの間に一致しない結果がありますか? – scaisEdge
より明快に編集 – LXXIII
顧客テーブルにないレコードの結合制限criteraを結合に移動します。例: 'LEFT JOIN StudentsCourses on Customers.Id = StudentsCourses.CustomerIdとStudentsCourses.SectionIdはNULLではありません。 AND StudentsCourses.Delete <> 2' studentsCoursesへの参加がnullの場合、顧客レコードを保持するために限度が参加前に適用されます。 。外部結合を使用する場合は、結合の前に結合制限基準を実行する必要があります。または、他の人が以下の回答で行ったように、あなたはヌルを考慮する必要があります。 – xQbert