que estoy tratando de hacerseleccionar varias tablas cuando una tabla está vacía en MySQL
SELECT * FROM a, b
Sin embargo, no devuelve nada si una de las mesas está vacía. ¿Cómo lo hago para que devuelva 'a' incluso si el otro está vacío?
que estoy tratando de hacerseleccionar varias tablas cuando una tabla está vacía en MySQL
SELECT * FROM a, b
Sin embargo, no devuelve nada si una de las mesas está vacía. ¿Cómo lo hago para que devuelva 'a' incluso si el otro está vacío?
El uso de dos tablas en la cláusula from
es funcionalmente equivalente a un cross join
:
select *
from A
cross join
B
Esto devuelve una fila de A para cada fila en B. Cuando B está vacía, el resultado es demasiado vacía. Puedes arreglar eso usando un left join
. Con un left join
, puede devolver filas incluso si una de las tablas está vacía. Por ejemplo:
select *
from A
left join
B
on 1=1
medida que la condición 1=1
siempre es cierto, esto es como un cross join
excepto que también trabaja para mesas vacías.
FYI," En MySQL, CROSS JOIN es un equivalente sintáctico a INNER JOIN (pueden reemplazarse entre sí) " –
@Imre L: Interesante. Probablemente aún sea más claro usar 'cross join' por convención si no hay una cláusula' on', ¡incluso si MySQL permite 'inner join' para el mismo propósito! – Andomar
Sí. Personalmente prefiero omitir las palabras 'INTERIOR' y' CRUZ', etc. Pero no me gusta utilizar CROSS JOIN en línea cuando se usan algunas condiciones en la tabla unida. –
SELECT * FROM a LEFT JOIN b ON a.ID = b.ID
Devolverá todo, incluso si b está vacío.
Ha supuesto que hay campos para unir, puede que no haya un campo común. Sin campos comunes, esto no puede funcionar. Vea ON 1 = 1 en la respuesta. – strattonn
Debe hacer una combinación izquierda.
gusta esta
SELECT *
FROM A
LEFT JOIN B ON A.ID = B.ID
a continuación, recibirá las filas de A y la fila correspondiente en B si existe.
Ha supuesto que hay campos para unir, puede que no haya un campo común. Sin campos comunes, esto no puede funcionar. Vea ON 1 = 1 en la respuesta. Esa es la clave de toda la cuestión, unir conjuntos vacíos sin campos comunes. – strattonn
Sí, tiene razón, en ese caso se requiere una unión cruzada o la condición 1 = 1 que es casi la misma. –
La consulta mencionada anteriormente muestra una combinación de ambas tablas si a contiene 2 registros yb contiene 7 registros, muestra 7 * 2 = 14 registros. En su caso, una de las tablas está vacía (con 0 registros), no mostrará ningún dato. Si aún desea visualizar datos y las tablas no tienen ninguna relación, debe verificar si el recuento de ambas tablas es mayor que 0. De lo contrario, se visualizan registros de una sola tabla que no está vacía.
SELECT a.*, b.* FROM a LEFT JOIN b ON a.id = b.id
en este ejemplo la identificación es simplemente el nombre de ejemplo para unirse clave
Supone que hay campos para unir, puede que no haya un campo común. Sin campos comunes, esto no puede funcionar.Vea ON 1 = 1 en la respuesta. – strattonn
http://dev.mysql.com/doc/refman/5.0/en/join.html Está utilizando la forma de 'INNER JOIN' que resulta con registros x * y, entonces si 1 de ellos tiene 0 filas, entonces x * 0 = 0. –