Pregunta

Tengo un poco de base de datos relacionales MySQL con docenas de mesas ... Mi consulta es de 1000 pies de largo y selecciona datos de casi todas las mesas ... También tengo mi mesa 'principal', y todos los demás cuadros hacen referencia a la uno. Cuando entro en una fila en mi mesa principal y cuando creo todas las relaciones de esa fila en otras tablas mi consulta funciona bien. Sin embargo, si entro en una fila en la tabla principal y en ninguna otra parte consigo conjunto vacío. Pero me gustaría obtener al menos esa información en mi resultado. O, por supuesto, toda la información que se introduce en otras tablas, independientemente del hecho de que algunas tablas no tienen información de dicho registro (fila) ...

Gracias por la ayuda!

Actualización:

No consumo sintaxis JOIN y mi consulta es similar a esto:

$query = "SELECT a.*, b.*, c.*, d.*, e.*, f.*";
$query .= " FROM a, b, c, d, e, f";
$query .= " WHERE a.aID = b.aID";
$query .= " AND b.bID = c.bID";
$query .= " AND b.bID = d.bID";
$query .= " AND b.bID = e.bID";
$query .= " AND b.bID = f.bID";
¿Fue útil?

Solución

Su pregunta es muy vaga, por ahora, pero lo más probable es debido al hecho de que utilice INNER JOINs en lugar de los LEFT JOINs.

Esta consulta:

SELECT  *
FROM    main
JOIN    secondary
ON      secondary.main_id = main.id

devolverá nada si secondary está vacía.

Esta consulta:

SELECT  *
FROM    main
LEFT JOIN
        secondary
ON      secondary.main_id = main.id

devolverá al menos un registro para cada registro en main, en sustitución de campos secundarios con NULLs si no hay registros coincidentes en secondary.

Actualización:

sintaxis JOIN implícito que utiliza (la enumeración de las tablas y proporcionar las condiciones JOIN en la cláusula WHERE) asume INNER JOINs.

Si se asume que se a la mesa "principal", vuelve a escribir su consulta lo siguiente:

SELECT  a.*, b.*, c.*, d.*, e.*, f.*
FROM    a
LEFT JOIN
        b
ON      b.aID = a.aID
LEFT JOIN
        с
ON      c.bID = b.bID
LEFT JOIN
        d
ON      d.bID = b.bID
LEFT JOIN
        e
ON      e.bID = b.bID
LEFT JOIN
        f
ON      f.bID = b.bID
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top