我正在为我的工作构建一个数据库,我无法弄清楚如何构建这个查询.
与我的问题相关的表是:
工作
Surgical_Planning - 作为外键的工作,存在一些工作,不存在其他工作
Medical_Model - 作为外键的工作,与工作的1对1关系
这是一个有效的查询,我没有任何有关手术计划的信息
SELECT
job,
physician_idphysician as Physician,
patient_idpatient as Patient,
status,
DATE_FORMAT(scan_date, '%M %e, %Y, %l:%i%p') as Scan_Date,
DATE_FORMAT(timestamp, '%M %e, %Y, %l:%i%p') as Recieved,
DATE_FORMAT(date_required, '%M %e, %Y, %l:%i%p') as Date_Required
FROM
job, patient_has_physician as phys, Scan, Medical_Model as med
WHERE
Scan.job_job = job AND phys.job_job = job
AND med.job_job = job AND job.type = 'medical
Run Code Online (Sandbox Code Playgroud)
我想我想做一个左连接,这样它就会按顺序显示每个工作,包含上面查询中的所有信息,但是当有一个工作的Surgical_Planning时,我希望那里有一个列也是如此.这是我的尝试无效
SELECT
job,
physician_idphysician as Physician,
patient_idpatient as Patient,
status,
DATE_FORMAT(scan_date, '%M %e, %Y, %l:%i%p') as Scan_Date,
DATE_FORMAT(timestamp, '%M %e, %Y, %l:%i%p') as Recieved,
DATE_FORMAT(date_required, '%M %e, %Y, %l:%i%p') as Date_Required
FROM
job, patient_has_physician as phys, Scan, Medical_Model as med
LEFT JOIN Surgical_Planning ON job.job = Surgical_Planning.job_job
AND Scan.job_job = job AND phys.job_job = job
AND med.job_job = job AND job.type = 'medical'
Run Code Online (Sandbox Code Playgroud)
我可以按照我想要的方式使用这个基本的左连接,但如果我想添加更多像上面的列那么它不起作用.
SELECT job, planning_id
FROM job
LEFT JOIN Surgical_Planning ON job = Surgical_Planning.job_job
Run Code Online (Sandbox Code Playgroud)
可以使用子查询吗?我可以找出这些更基本的查询,但真的遇到这些更复杂的连接和子查询问题.任何建议表示赞赏.
编辑---作业表架构
- 表mmrl.job
DROP TABLE IF EXISTS mmrl.job;
创建表,如果不是存在mmrl.job(
job INT(11)NOT NULL AUTO_INCREMENT,
type VARCHAR(45)NULL,
status VARCHAR(45)NULL DEFAULT NULL,
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(job))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
Jul*_*ien 13
更改
LEFT JOIN Surgical_Planning ON job.job = Surgical_Planning.job_job
AND Scan.job_job = job AND phys.job_job = job
AND med.job_job = job AND job.type = 'medical'
Run Code Online (Sandbox Code Playgroud)
至
LEFT JOIN Surgical_Planning ON job.job = Surgical_Planning.job_job
WHERE Scan.job_job = job AND phys.job_job = job
AND med.job_job = job AND job.type = 'medical'
Run Code Online (Sandbox Code Playgroud)
编辑:
左连接发生在实际LEFT JOIN语法左侧的表中.将作业移至列表的末尾,然后重试.
FROM patient_has_physician as phys, Scan, Medical_Model as med, job
Run Code Online (Sandbox Code Playgroud)