Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/10/2012, 19:11
Avatar de gnzsoloyo
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)