1

Buenas a todos!!!

Quiero hacer una consulta SQL que me recupere todos los campos de la tabla PRODUCTO cuyo campo id se encuentre en la tabla VENTAS, la tabla VENTAS tiene como campos : idProducto, idVenta, Observación y la tabla PRODUCTO tiene idProducto, precio, descripción.

La consulta que he pensado es:

SELECT * 
   FROM `producto` 
   WHERE `idProducto`= 
       (SELECT idProducto 
           FROM `ventas` 
           WHERE `idProducto`=6)

Al probarlo en phpMyAdmin me da el error de que la subconsulta tiene varios registros, ¿cómo se puede hacer una consulta de este tipo? Es usando JOIN? Muchas gracias

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
midlab
  • 309
  • 2
  • 5
  • 14

3 Answers3

4

Podrias realizar una consulta como esta:

SELECT * 
    FROM producto 
    JOIN ventas ON ventas.idProducto = producto.idProducto 
    WHERE producto.idProducto = 6

Primero, realizamos el JOIN uniendo la tabla ventas con la tabla producto.

JOIN ventas

Segundo, indicamos la union que se realizara entre las tablas:

ON ventas.idProducto = producto.idProducto

Tercero indicamos la condicion:

WHERE producto.idProducto = 6
A. Cedano
  • 86,578
  • 19
  • 122
  • 221
Ivan Botero
  • 6,513
  • 9
  • 33
  • 53
  • La consulta con `JOIN` no es necesariamente equivalente a lo que quiere el op. Por ejemplo, en caso que la tabla `VENTAS` tenga un `idProducto` repetido (que puede suceder perfectamente), tu consulta duplicará los resultados. Además, al usar `SELECT *`, estás seleccionando todas las columnas de ambas tablas – Lamak Feb 23 '17 at 14:57
  • Usar `SELECT * ...` es una mala práctica en SQL, porque casi siempre te llama columnas de la tabla que no vas a usar. Se nota poco en tablas pequeñas, pero en tablas grandes afecta la rapidez y el rendimiento de las consultas. – A. Cedano Feb 23 '17 at 14:59
  • @Lamak Si, tienes razon, solo que al ver que el vuelve a hacer una condicion en la que selecciona de otra tabla un elemento con un identificador (_suponiendo que el identificador es unico_), supuse que seria mejor si usara el `JOIN` – Ivan Botero Feb 23 '17 at 15:01
  • @A.Cedano Lo se, puse el `SELECT *` debido a que queria tratar de guardar el formato original de la pregunta, aunque sea una mala practica. – Ivan Botero Feb 23 '17 at 15:01
  • @IvanBotero Lo imaginaba, el comentario iba dirigido al autor de la pregunta :). Saludos. – A. Cedano Feb 23 '17 at 15:02
  • Deberías aclarar que no es necesario hacer consultas anidadas en este caso – userStack Feb 23 '17 at 16:24
1

¡Hola! Al principio tenía el mismo problema que tú. Pero es sencillo:

Seleccionar todas las columnas:

SELECT *

Tabla 1:

FROM Producto

Tabla 2 en unión con la tabla 1:

JOIN Ventas

Hacer la union de la tabla 1 y la tabla 2:

ON Ventas.CodigoProducto = Producto.CodigoProducto

Cuando el código del producto sea igual a 6:

WHERE Producto.CodigoProducto = 6

¡Éxito! :)

Elvis
  • 21
  • 2
1
SELECT DISTINCT P.* FROM PRODUCTO P,
VENTAS V
WHERE P.IDPRODUCTO=V.IDPRODUCTO

No entiendo porque pones idproducto=6, no especificas que quieras precisamente ese producto, pero si es así, entonces la consulta sería de esta manera:

SELECT DISTINCT P.* FROM PRODUCTO P,
VENTAS V
WHERE P.IDPRODUCTO=V.IDPRODUCTO
      AND V.ID_PRODUCTO=6
Ivan Botero
  • 6,513
  • 9
  • 33
  • 53
Stefania
  • 11
  • 2
  • @Ivan Botero, he puesto 6 por poner algo, en mi script de php obtengo esa variable mediante el metodo $_POST[], me interesaba saber si era IN o JOIN, acabo de empezar con SQL y todo lo que no sea coger datos de una sola table de momento me viene grande, aunque gracias a vuestras colaboraciones se entiende todo mucho mejor – midlab Feb 23 '17 at 18:46
  • Entiendo, bueno pues que bueno que te sirvan los comentarios, puedes utilizar un JOIN o dejarlo como lo puse en el comentario. Estamos para ayudarnos. – Stefania Feb 25 '17 at 02:23