SQL - sustituir inner join por subconsulta

 
Vista:
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por jose luis (7 intervenciones) el 09/03/2021 17:29:39
hay alguna forma de sustituir esta consulta con inner join por una subconsulta?
1
select usuarios.nombre from usuarios inner join ventas on usuarios.id=ventas.idUsuario;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 29
Ha aumentado su posición en 5 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por Marc (12 intervenciones) el 09/03/2021 17:49:13
Hola,

En teoria si, no habría ningún tipo de problema.
Únicamente que una subconsulta es menos efectiva que un inner join.

1
select usuarios.nombre from usuarios where usuarios.id in (select idUsuario from ventas)

De esta manera le dices al WHERE que el IdUsuario de la tabla USUARIOS esté dentro de los idUsuario de la tabla VENTAS.
Si cambiamos el IN por un = no dejaria porque la subconsulta nos devuelve VARIOS valores.
Es lo mismo que el join pero echo de forma distinta y sin que puedas hacer referencia a campos de la tabla VENTAS en el select PRINCIPAL.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por Isaias (1921 intervenciones) el 09/03/2021 19:10:24
El in, es muy lento para la base de datos, en caso de que este utilizando SQL Server, cámbielo por un EXISTS o algo similar en su motor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por jose luis (7 intervenciones) el 09/03/2021 20:19:07
no da el mismo resultado. Como puedes ver en esta captura: https://postimg.cc/Z01T6xSw el usuario con id=2 tiene dos compras y con tu subonsulta solo me muestra un resultado: https://postimg.cc/jCjXyyXn, yo quiero que me aparezcan los dos resultados: https://postimg.cc/RWCV0V9m
saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por Isaias (1921 intervenciones) el 10/03/2021 00:24:30
¿Que motor de base de datos esta ocupando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 5 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por Marc (12 intervenciones) el 10/03/2021 09:03:09
Cambiando el IN por ALL o ANY y debería de mostrarte todos los valores, ya que IN solo comprueba si está una sola vez.
Pruébalo y me comentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por jose luis (7 intervenciones) el 10/03/2021 16:26:54
con
1
=all
no me devuelve nada y con
1
=any
me devuelve lo mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 5 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por Marc (12 intervenciones) el 10/03/2021 16:29:59
¿Así lo has probado?
1
select usuarios.nombre from usuarios where usuarios.id = any (select idUsuario from ventas)

¿Y asi?
1
select usuarios.nombre from usuarios where usuarios.id = all(select idUsuario from ventas)

Que motor de base de datos usas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

sustituir inner join por subconsulta

Publicado por jose luis (7 intervenciones) el 10/03/2021 17:18:10
sí, asi lo he probado, el motor que uso es mysql. un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar