如何使mysql中的多个表之间的连接工作

如何使mysql中的多个表之间的连接工作,mysql,sql,amazon-rds,Mysql,Sql,Amazon Rds,我有三个表,病人集,用户和地图病人集用户。我正在尝试在单个查询中在patient_集和user以及patient_集和map_patient_集和user之间进行内部连接。查询应返回给定用户是其创建者或护理协调员的所有患者集合。但是,如果患者集具有所需的权限(在map_patient_set_user中指定),也可以返回患者集。下面的查询只从map_patient_set_用户返回数据,并忽略patient_set和user之间的连接。实现此联接的正确方法应该是什么 //Query SELECT

我有三个表,病人集,用户和地图病人集用户。我正在尝试在单个查询中在patient_集和user以及patient_集和map_patient_集和user之间进行内部连接。查询应返回给定用户是其创建者或护理协调员的所有患者集合。但是,如果患者集具有所需的权限(在map_patient_set_user中指定),也可以返回患者集。下面的查询只从map_patient_set_用户返回数据,并忽略patient_set和user之间的连接。实现此联接的正确方法应该是什么

//Query
SELECT *
  FROM (
    patient_set AS a 
          JOIN user AS b ON a.creator_id = b.user_id OR a.care_coordinator = b.user_id
          JOIN map_patient_set_user AS m ON a.patient_set_id = m.patient_set_id
   )
  WHERE 
    b.user_id = UUID_TO_BIN_F(:id)
    OR 
    m.permission = 'view_all'
  ORDER BY created DESC;


//Tables
CREATE TABLE user (
    user_id BINARY(16) PRIMARY KEY NOT NULL,
    first_name VARCHAR(55) NOT NULL,
    last_name VARCHAR(25) NOT NULL,
    org_id INT UNSIGNED,
    FOREIGN KEY (org_id) REFERENCES organization(org_id),
    lru_patient_set_id BINARY(16)
);

CREATE TABLE patient_set (
    patient_set_id BINARY(16) PRIMARY KEY NOT NULL,
    creator_id BINARY(16) NOT NULL,
    FOREIGN KEY (creator_id) REFERENCES user(user_id), 
    created DATETIME NOT NULL, 
    last_updated DATETIME,
    care_coordinator BINARY(16),
    FOREIGN KEY (care_coordinator) REFERENCES user(user_id),
    num_patient_updates INT NOT NULL,
    name VARCHAR(100)
);

CREATE TABLE map_patient_set_user (
    patient_set_id BINARY(16),
    user_id BINARY(16),
    permission ENUM('view_no_personal', 'view_all', 'edit_all'),
    FOREIGN KEY(patient_set_id) REFERENCES patient_set(patient_set_id),
    FOREIGN KEY(user_id) REFERENCES user(user_id)
);

如果您有不与其他表联接的应返回行,请使用使用
UNION
组合的多个查询。在mysql中,联接与内部联接相同。你可能需要左键连接