2012-03-02 19 views
6

Estoy construyendo una base de datos para mi trabajo y estoy teniendo problemas para entender cómo crear esta consulta.mysql left join with multiple columns

las tablas correspondientes a mi problema son:

trabajo

Surgical_Planning - tiene trabajo como clave externa, existe para algunos puestos de trabajo, lo hace no para otros

Medical_Model - tiene trabajo como clave externa , relación 1 a 1 con el trabajo

Esta es una consulta de trabajo donde no tengo ninguna información sobre la planificación quirúrgica

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 

Creo que quiero hacer una combinación de la izquierda para que se muestren todas las tareas en orden, con toda la información en la consulta anterior, pero luego cuando hay una Planificación_survical para un trabajo # Quiero que haya una columna para eso también. Aquí está mi intento que no está funcionando

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' 

puedo conseguir esta izquierda básica join funcione de la manera que quiero, pero si quiero añadir más columnas como la de arriba no funciona.

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

¿Podría usarse una subconsulta también? Puedo resolver estas consultas más básicas, pero realmente tengo problemas con estas combinaciones más complejas y subconsultas. cualquier consejo es apreciado

EDITAR --- mesa de trabajo esquema


- Tabla mmrl. job


DROP TABLE IF EXISTS mmrl. job;

CREAR TABLA SI NO EXISTE mmrl.job (

job INT (11) AUTO_INCREMENT NOT NULL,

type VARCHAR (45) NULL,

status VARCHAR (45) NULL NULL DEFAULT,

timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP EN ACTUALIZACIÓN CURRENT_TIMESTAMP,

PRIMARY KEY (job))

MOTOR = InnoDB

DEFAULT CHARACTER SET = latin1;

Respuesta

11

cambio

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' 

a

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:

la izquierda se unen ocurre en la mesa a la izquierda de la sintaxis real LEFT JOIN. Mueva el trabajo al final de su lista y vuelva a intentarlo.

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