conjunto vacío mientras que la selección de datos en MySQL base de datos relacional
-
19-09-2019 - |
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";
Solución
Su pregunta es muy vaga, por ahora, pero lo más probable es debido al hecho de que utilice INNER JOIN
s en lugar de los LEFT JOIN
s.
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 NULL
s 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 JOIN
s.
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