我只知道基本的 SQL,但我正在处理的项目使用非常复杂的查询。有一个我无法理解的查询。关注的表和字段是people
和person_details
更脏的查询的可执行部分是:
SELECT people.first_name
, people.last_name
, person_statuses.name as person_status
, companies.name as company_name
, person_roles.name as role
, person_role_memberships.event_name as membership_year
, person_role_memberships.start_date as start_date
, person_role_memberships.end_date as end_date
, person_role_memberships.sponsor_parent_company as sponsor_parent_company
, person_role_memberships.former_sponsor_parent_company as former_sponsor_parent_company
, person_role_memberships.workshop as workshop
FROM people
, *person_details as business_details*
, *person_details*
, person_roles
, person_role_memberships
, companies
, person_statuses
, companies as parent_companies
WHERE person_role_memberships.person_id = people.id
AND person_role_memberships.person_role_id = person_roles.id
AND
business_details.type = 'BusinessDetail'
and business_details.person_id = people.id
AND person_details.type = 'PersonalDetail'
and person_details.person_id = people.id
AND people.person_status_id = person_statuses.id
AND ifnull(companies.parent_id, companies.id) = parent_companies.id
AND people.company_id = companies.id
AND companies.name = 'Pak Qatar'
AND people.last_name = 'Aslam'
limit 100;
我想知道该where
子句的粗体部分创建的逻辑是什么。是不是因为AND
关键字,只允许那些有 BusinessDetail 和 PersonalDetails 的人是person_details
表?