2012-03-02 5 views
6

Я создаю базу данных для своей работы, и мне трудно понять, как построить этот запрос.mysql left join with multiple columns

Таблицы, имеющие отношение к моей проблеме является:

работы

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 

Может быть использован и подзапрос? Я могу выяснить эти более простые запросы, но действительно имею проблемы с этими более сложными соединениями и подзапросами. любые советы приветствуются.

EDIT --- таблица Работа схемы


- Таблица mmrl. job


DROP TABLE IF EXISTS mmrl. job;

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ mmrl.job (

job INT (11) NOT NULL AUTO_INCREMENT,

type УАКСНАК (45) NULL, то

status УАКСНАК (45) Ноль По умолчанию значение NULL,

timestamp ТШЕЗТАМР NOT NULL УМОЛЧАНИЮ CURRENT_TIMESTAMP ПО UPDATE CURRENT_TIMESTAMP,

ПЕРВИЧНЫЙ КЛЮЧ (job))

ДВИГАТЕЛЬ = 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' 

EDIT:

левый присоединиться происходит к столу слева от фактического LEFT JOIN синтаксиса. Переместите задание в конец своего списка и повторите попытку.

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