1

Tengo esta consulta en MySQL:

SELECT * FROM admin_vln.user, admin_vln.device 
WHERE admin_vln.user.id_user = admin_vln.device.id_user_device

Que lo que hace es devolver una nueva tabla mostrando todos los datos de la tabla user y devices en donde se cumple que el campo id_user de la tabla user es igual al campo id_user_device de la tabal device.

El problema es que algunos datos de la tabla devices en la columna id_user_device estan NULL y no me los agrega a la consulta. Como hago para que tambien los agregue a la consulta pormar de que no este asociado a ningun user?

Japv
  • 9,317
  • 8
  • 11
  • 29

2 Answers2

2

Según lo que se expone en tu pregunta: un user puede tener muchos devices y es en la tabla devices donde se almacena como llave foránea el id del usuario con el dispositivo relacionado.

Tomando en cuenta lo anterior, entonces la consulta podría componerse de esta forma:

SELECT * FROM admin_vln.user
RIGHT JOIN admin_vln.device ON admin_vln.user.id_user = admin_vln.device.id_user_device

Así obtendrías todos los usuarios (de la izquierda) mas los dispositivos (de la derecha) que no están relacionados con alguno de ellos.

Puedo recomendar leas:

BetaM
  • 30,571
  • 7
  • 32
  • 50
1

Existen varios formas de juntar dos tablas, una es aplicando la forma que ya usas en tu ejemplo, es decir:

select columnas
from tabla1, tabla2
where tabla1.id = tabla2.id;

Otra forma es aplicando la clausula inner join, que solamente va a juntar las dos tablas si el campo que se se usa para hacer la relacion es comun en ambas tablas:

select columnas
from tabla1 inner join tabla2 on tabla1.id = tabla2.id;

Esta forma hace lo mismo que la de tu ejemplo pero es mas legible, ya que entre otras cosas la consulta suele ser mas corta y la clausula where no se usa para establecer la relacion entre las tablas.

Para darle solucion a tu problema puedes usar las clausulas left join o right join:

select columnas
from tabla1 left join tabla2 on tabla1.id = tabla2.id;

En esta consulta se usa la clausula left join, la cual permite juntar las dos tablas coincidan o no las columnas por las que se hace la comparacion, es decir en caso de que hayan coincidencias entre las columnas que se comparan, se establece la relacion como hasta ahora, pero en caso de que no hayan coincidencias se muestra a la izquierda los datos de tabla1 y a la derecha como no hay coincidencia se rellena esa fila con valores null.

select columnas
from tabla1 right join tabla2 on tabla1.id = tabla2.id;

Aqui ocurre lo mismo salvo que en caso de que no hayan coincidencias se muestra a la derecha los datos de tabla2 y a la izquierda como no hay coincidencia se rellena esa fila con valores null.

Japv
  • 9,317
  • 8
  • 11
  • 29