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

[SOLUCIONADO] Columna ... en where clause es desconocida

Estas en el tema de Columna ... en where clause es desconocida en el foro de Mysql en Foros del Web. Buenas, Llevo rato y quizás estoy ofuscada, pero no se ver donde está el error. No entiendo porqué me da el error: Código: #1054 - ...
  #1 (permalink)  
Antiguo 18/01/2018, 08:08
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 547
Antigüedad: 17 años, 10 meses
Puntos: 4
Columna ... en where clause es desconocida

Buenas,
Llevo rato y quizás estoy ofuscada, pero no se ver donde está el error.
No entiendo porqué me da el error:
Código:
#1054 - La columna 'sc1' en where clause es desconocida
Gracias

Código MySQL:
Ver original
  1. SELECT SUBSTR(sc,1,4) AS sc1
  2. FROM sc
  3. WHERE sc1 = "7160"

__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #2 (permalink)  
Antiguo 18/01/2018, 08:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Columna ... en where clause es desconocida

Los alias de los campos en el SELECT no se pueden usar en los WHERE de la misma sentencia. Es una regla de TODOS los DBMS. En el WHERE sólo se pueden usar nombres de columnas físicas.
Para hacer eso ese SELECT debe generar una tabla derivada, es decir estár dentro de una subconsulta.

Código SQL:
Ver original
  1. SELECT sc1
  2. FROM (SELECT SUBSTR(sc,1,4) sc1
  3. FROM sc) tablaresultado
  4. WHERE sc1 = '7160'

Un par de cosas:
1) Los "AS" son obsoletos, no se requieren ni representan ventaja alguna desde hace mas de una década. ALgunos DBMS incluso te pueden marcar errores de sintaxis cuando los pones.
2) En MySQL las comillas (") se suelen usar en los nombres de objetos de base de datos, y NO en cadenas de texto. Ten cuidado porque pueden disparar errores inesperadamente si el servidor de MySQL no está específicamente configurado para reconocerlos como cadenas de texto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/01/2018, 09:07
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 547
Antigüedad: 17 años, 10 meses
Puntos: 4
Respuesta: Columna ... en where clause es desconocida

Gracias .... ya veo ... estoy muy anticuada
Ya sé que he cerrado el tema, pero yo sigo liada con él. Tengo la siguiente sentencia mysql pero no me devuelve lo que yo busco:
Código MySQL:
Ver original
  1. SELECT tablaSC.sc, pp.pieza, pp.proveedor, pp.precio, pp.fentregado FROM (SELECT SUBSTR(sc,1,4) sc, expedicio FROM sc WHERE expedicio = '0000-00-00') tablaSC
  2. INNER JOIN pedidos p ON substr(p.maquina,1,4)=tablaSC.sc OR substr(p.maquina,2,4)=tablaSC.sc
  3. INNER JOIN pedidos_piezas pp ON p.pedido = pp.pedido
  4. WHERE tablaSC.expedicio = '0000-00-00'

Fabricamos máquinas y para ello debemos comprar material.
- tablaSC: son las máquinas
- pedidos: son los pedidos que hacemos de cada máquina
- pedidos_piezas: es el detalle del pedido

Por lo que: 1 máquina -> varios pedidos -> varios pedidos_piezas

Alguna relación entre tablas hago mal, por lo que me devuelve un número superior de registros de la tabla pedidos_piezas. Lo cual, no es correcto.

He probado de anidar los dos joins, con el mismo resultado:
Código MySQL:
Ver original
  1. SELECT tablaSC.sc, pp.pieza, pp.proveedor, pp.precio, pp.fentregado FROM (SELECT SUBSTR(sc,1,4) sc, expedicio FROM sc WHERE expedicio = '0000-00-00') tablaSC
  2. INNER JOIN (pedidos p INNER JOIN pedidos_piezas pp ON p.pedido = pp.pedido) ON (substr(p.maquina,1,4)=tablaSC.sc OR substr(p.maquina,2,4)=tablaSC.sc)
Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no

Última edición por mblascog; 18/01/2018 a las 10:09

Etiquetas: columna, select, sql
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 01:42.