2012-03-31 16 views
8

Estoy tratando de encontrar una consulta que se una a varias tablas (cca 8). En un punto, necesito unirme a una de dos tablas. Así que vamos a llamar el resultado hasta este punto A. Ahora quiero unirme a B, o C. Cuando uso B, obtengo un resultado más pequeño o ningún resultado. Si no hay ningún resultado después de la unión, necesito unirme a C en su lugar.Si luego únete a otra persona, únete

En resumen, la intersección de (A, C) da un resultado mayor y solo quiero unir C si la intersección de (A, B) está vacía.

¿Cuál sería una forma sencilla de decir esto en mysql?

Respuesta

13

sólo para unirse a si el primer unirse clave principal es nulo:

SELECT * 
FROM A 
LEFT JOIN B ON A.id = B.id 
LEFT JOIN C ON B.id IS NULL AND A.id = C.id 
+3

Si desea que los resultados de B o C a aparecer en las mismas columnas en la lista de selección, se puede usar algo como 'se unen SELECT (B.id, C.id) como id, se unen (B.othercolumnname, C.othercolumnname) como othercolumnname, ... '. – Asaph

+0

Gran punto, gracias Asaph – GavinCattell

+0

gracias a los dos, esa es exactamente la idea que he estado buscando –

Cuestiones relacionadas