2012-03-02 135 views
6

我正在爲我的工作構建數據庫,並且無法確定如何構建此查詢。mysql左加入多列

有關我的問題的表是:

工作

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 

我想我想做一個左連接,這樣它將按順序顯示每個作業,包含上面查詢中的所有信息,但是當有作業的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' 

我能得到這個基本LEFT JOIN工作,我想要的方式,但如果我想添加更多的列像上面這是行不通的。

SELECT job, planning_id 
    FROM job 
    LEFT JOIN Surgical_Planning ON job = Surgical_Planning.job_job 

可以使用子查詢嗎?我可以弄清楚這些更基本的查詢,但真正遇到這些更復雜的連接和子查詢問題。任何建議表示讚賞。

編輯---工作表模式


- 表mmrljob


DROP TABLE IF EXISTS mmrljob;

CREATE TABLE IF NOT EXISTS mmrljob

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;

回答

11

變化

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' 

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' 

編輯:

左側發生一起對錶實際LEFT JOIN語法的左側。將作業移至列表的末尾並重試。

FROM patient_has_physician as phys, Scan, Medical_Model as med, job