Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

error 1241 en consulta

Estas en el tema de error 1241 en consulta en el foro de Mysql en Foros del Web. hola que tal de nuevo con una molestia , tengo dos tablas en mi base de datos una donde guardo los articulos y otra donde ...
  #1 (permalink)  
Antiguo 29/10/2012, 15:06
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
error 1241 en consulta

hola que tal de nuevo con una molestia , tengo dos tablas en mi base de datos una donde guardo los articulos y otra donde guardo las variedades
mi tabla articulo tiene el campo articulo y el campo id_variedad y la tabla variedad tengo el campo id y el campo variedad , haciendo joins mysql me une a la perfeccion
con select t1.articulo,t2.variedad from articulos as t1 left outer join variedades as t2 on t1.id_var = t2.id

pero necesito hacer una consulta donde me elija las variedades que no se encuentren en la tabla articulo de un articulo especifico intente con lo siguiente

SELECT ID,VARIEDAD FROM VARIEDADES where VARIEDAD NOT IN (SELECT T1.ID_VAR,T2.VARIEDAD from ARTICULOS as t1 left outer join VARIEDADES as t2 on t1.id_var = t2.id where t1.ARTICULO ='28-wilson')


y me resulta con el siguiente error

ERROR 1241 (2100) : OPERAND SHOULD CONTAINT 1 COLUMN(S)

si alguien me pudiera orientar sobre la manera correcta de hacer la consulta que necesito estare ampliamente agradecido , de antemano se aprecia la atencion salu2
  #2 (permalink)  
Antiguo 29/10/2012, 16:02
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: error 1241 en consulta

Hola fahs82:

La descripción del error es bastante clara... el operador IN sólo puede compararse contra un valor, en el caso de la subconsulta que estás poniendo, el SELECT está regresando DOS CAMPOS:

Código:
...
where VARIEDAD NOT IN (SELECT T1.ID_VAR,T2.VARIEDAD from ARTICULOS as t1
...
El campo ID_VAR te sirve en realidad para algo??? si no es así simplemente tienes qu quitarlo del SELECT y dejar solamente el vampo T2.VARIEDAD

Código:
...
where VARIEDAD NOT IN (SELECT T2.VARIEDAD from ARTICULOS as t1
...
Saludos
Leo.
  #3 (permalink)  
Antiguo 29/10/2012, 18:17
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Respuesta: error 1241 en consulta

si notas es un join el que estoy usando , el campo variedad no existe en la otra tabla , mi duda es en si como ejecutar la sentencia que me regrese las id de la tabla variedad que no esten en la tabla articulos en conjunto con el campo variedad, el campo lo tengo con distinto nombre en la tabla variedad el nombre del campo es id y en la tabla articulos el campo tiene el nombre de id_var
  #4 (permalink)  
Antiguo 29/10/2012, 19:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error 1241 en consulta

El JOIN de la subconsulta es completamente irrelevante en el mensaje de error. El problema es que en el IN estás comparando un único campo, contra dos campos.
¿Eso se entiende?

En tu caso, el campo VARIEDAD se compara contra el resultado de la subconsulta puesta en el IN(). Que exista un campo "variedad" en una de las tablas de la subconsulta no es importante, porque no se comparan por nombre, sino que se comparan los datos.
Una nota adicional: LEFT OUTER JOIN sólo existe por compatibilidad con otros motores. La sentencia correcta para MySQL (y como la parsea) es LEFT JOIN.
Yendo a tu consulta:
Código MySQL:
Ver original
  1.     id,
  2.     variedad
  3. FROM variedades
  4. WHERE variedad NOT IN
  5.     (SELECT
  6.         T1.id_var,
  7.         T2.variedad
  8.     FROM
  9.         articulos t1
  10.         LEFT OUTER JOIN
  11.         variedades t2 ON t1.id_var = t2.id
  12.         WHERE t1.articulo ='28-wilson');

La mayor parte de la sintaxis es absolutamente innecesaria para lo que quieres:
Cita:
me regrese las id de la tabla variedad que no esten en la tabla articulos
La sola subconsulta ya devuelve eso, sólo que hay que escribirla correctamente:
Código MySQL:
Ver original
  1.     T2.id_var,
  2.     T2.variedad
  3.     variedades t2 LEFT JOIN articulos t1 ON t1.id_var = t2.id
  4. WHERE t2.articulo IS NULL
Lo que creo que tienes que revisar y entender es la lógica de lo que vas a obtener con LEFT JOIN: Donde no hay coincidencias, devuelve NULL, por lo que jamás te podría devolver el campo id_var de la tabla artículos, si no hay coincidencias...
Creo que tienes que meditar mejor qué es lo que quieres obtener, para poder escribir correctamente la sentencia que te permita obtener datos que existan.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/10/2012, 16:29
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Respuesta: error 1241 en consulta

gracias gnzsoloyo , me cuesta un entender la logica de los joins pero con la explicacion todo clarisimo , antes de hacer la consulta creo que estructurare bien lo que me retorna , en verdad mil gracias

Etiquetas: consultanotin, error1241
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:18.