2009-08-02 17 views
8

Tengo una situación en la que tengo una tabla de títulos (t1) y otra tabla con múltiples enlaces que hacen referencia a estos títulos (t2) en una relación uno a muchos.MySQL Unir sintaxis para una relación de uno a muchos

Lo que quiero es la lista completa de títulos devueltos con un indicador que indica si hay un enlace específico asociado.

combinación izquierda y Agrupar por:

SELECT 
    t1.id 
    , t1.title 
    , t2.link_id AS refId 
FROM 
    t1 
    LEFT JOIN t2 
     ON (t1.id = t2.title_id) 
GROUP BY t1.id; 

Esto está cerca ya que me da bien el primer link_id o NULL en la columna de la RefID.

Ahora, ¿cómo restrinjo los resultados si tengo un link_id específico en lugar de permitir que t2 se ejecute a través de todo el conjunto de datos?

Si añado una cláusula WHERE, por ejemplo:

WHERE t2.link_id = 123 

solo me dan los pocos registros en los que los partidos link_id pero todavía necesitan el conjunto completo de títulos vuelto con NULL en la columna de la RefID menos link_id = 123.

espero que alguien pueda ayudar a

Respuesta

13

lugar de en la cláusula WHERE, puso sus criterios en la cláusula LEFT JOIN:

SELECT 
    t1.id 
    , t1.title 
    , t2.link_id AS refId 
FROM 
    t1 
    LEFT JOIN t2 
     ON t1.id = t2.title_id AND t2.link_id = 123 
GROUP BY t1.id; 
+0

Gracias tanto para esto. Funciona perfectamente. :) – Das123

4

ponerlo en la condición de unión de la segunda tabla

SELECT t1.id, t1.title, t2.link_id as refId 
FROM t1 
LEFT JOIN t2 ON t1 = t2.title_id AND t2.link_id = 123 
GROUP BY t1.id; 
+0

No debería ser: 'ON t1.id = t2.title_id'? ¿O tomará automáticamente el pk al especificar la tabla? –

Cuestiones relacionadas