2012-03-02 48 views
6

Tôi đang xây dựng cơ sở dữ liệu cho công việc của mình và tôi đang gặp khó khăn trong việc tìm hiểu cách xây dựng truy vấn này.mysql trái tham gia với nhiều cột

Các bảng có liên quan đến vấn đề của tôi là:

việc

Surgical_Planning - có công việc như chính nước ngoài, tồn tại đối với một số công việc, không cho người khác

Medical_Model - có công việc như chính nước ngoài , Mối quan hệ 1 đến 1 với công việc

Đây là truy vấn hoạt động mà tôi không có bất kỳ thông tin nào về quy hoạch phẫu thuật

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 

Tôi nghĩ tôi muốn thực hiện một phép nối trái để nó hiển thị mọi công việc theo thứ tự, với tất cả thông tin trong truy vấn ở trên, nhưng khi có một Surgical_Planning cho công việC# Tôi muốn có một cột cho điều đó. Đây là nỗ lực của tôi không hoạt động

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' 

Tôi có thể thực hiện phép nối cơ bản này theo cách tôi muốn, nhưng nếu tôi muốn thêm nhiều cột như trên thì nó không hoạt động.

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

cũng có thể sử dụng truy vấn con? Tôi có thể tìm ra các truy vấn cơ bản hơn nhưng thực sự gặp rắc rối với các truy vấn phức tạp và truy vấn phụ phức tạp hơn. bất kỳ lời khuyên nào được đánh giá cao.

EDIT --- bảng Job schema


- Bảng mmrl. job


BẢNG DROP NẾU TIẾP THEO mmrl. job;

TẠO TẠO NẾU KHÔNG PHÁT HIỆN mmrl.job (

job INT (11) AUTO_INCREMENT NOT NULL,

type VARCHAR (45) NULL,

status VARCHAR (45) NULL DEFAULT NULL,

timestamp dấu thời gian KHÔNG DEFAULT NULL CURRENT_TIMESTAMP ON CẬP NHẬT CURRENT_TIMESTAMP,

KEY CHÍNH (job))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

Trả lời

11

thay đổi

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' 

EDIT:

trái join xảy ra đối với các bảng bên trái của LEFT JOIN cú pháp thực tế. Chuyển công việc đến cuối danh sách của bạn và thử lại.

FROM patient_has_physician as phys, Scan, Medical_Model as med, job 
Các vấn đề liên quan