varios varias valores una mismo misma ejemplos consultas condiciones condicion con columna campo agrupadas mysql sql mysql-error-1054

mysql - varias - varios valores en una misma columna con where



Columna desconocida en donde cláusula (18)

Tengo una consulta simple:

SELECT u_name AS user_name FROM users WHERE user_name = "john";

Obtengo la Unknown Column ''user_name'' in where clause . ¿No puedo referirme a ''user_name'' en otras partes de la declaración incluso después de select ''u_name as user_name'' ?


Columna desconocida en la cláusula WHERE causada por las líneas 1 y 2 y resuelta por la línea 3:

  1. $sql = "SELECT * FROM users WHERE username =".$userName;
  2. $sql = "SELECT * FROM users WHERE username =".$userName."";
  3. $sql = "SELECT * FROM users WHERE username =''".$userName."''";

Consulte la siguiente página del manual de MySQL: http://dev.mysql.com/doc/refman/5.0/en/select.html

"A select_expr se le puede asignar un alias con AS alias_name. El alias se usa como el nombre de la columna de la expresión y se puede usar en cláusulas GROUP BY, ORDER BY o HAVING."

(...)

No está permitido referirse a un alias de columna en una cláusula WHERE, porque el valor de la columna aún no se puede determinar cuando se ejecuta la cláusula WHERE. Consulte la Sección B.5.4.4, "Problemas con alias de columna".


No tan lejos como sé en MS-SQL 2000/5. Me he equivocado de esto en el pasado.


No, debes seleccionarlo con el nombre correcto. Si le dio la tabla que selecciona de un alias, puede usar eso.


No, no puedes. user_name no existe hasta el tiempo de devolución.


Puede ser que ayude

Usted puede

SET @somevar := ''''; SELECT @somevar AS user_name FROM users WHERE (@somevar := `u_name`) = "john";

Funciona.

¡PERO ASEGÚRESE DE LO QUE HACE!

  • Los índices NO SE UTILIZAN aquí
  • Habrá una TABLA LLENA escaneada: no ha especificado la parte LÍMITE 1
  • Entonces, - ESTA CONSULTA SERÁ SLLLOOOOOOW en mesas enormes.

Pero, puede ser que ayude en algunos casos


Qué pasa:

SELECT u_name AS user_name FROM users HAVING user_name = "john";


SQL se evalúa al revés, de derecha a izquierda. Entonces, la cláusula where se analiza y evalúa antes de la cláusula de selección. Debido a esto, aún no se ha producido el alias de u_name para user_name.


Si bien puede alias sus tablas dentro de su consulta (es decir, "SELECCIONAR u.nombre de usuario FROM usuarios u;"), debe usar los nombres reales de las columnas a las que hace referencia. AS solo afecta la forma en que se devuelven los campos.


Si está intentando realizar una consulta como la siguiente (busque todos los nodos con al menos un archivo adjunto) donde ha utilizado una instrucción SELECT para crear un nuevo campo que no existe realmente en la base de datos, e intente utilizar el alias para ese resultado te encontrarás con el mismo problema:

SELECT nodes.*, (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) AS attachmentcount FROM nodes WHERE attachmentcount > 0;

Obtendrá un error "Columna desconocida ''attachmentcount'' en la cláusula WHERE".

La solución es realmente bastante simple: simplemente reemplace el alias con la declaración que produce el alias, por ejemplo:

SELECT nodes.*, (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) AS attachmentcount FROM nodes WHERE (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) > 0;

Todavía obtendrá el alias devuelto, pero ahora SQL no debería bork en el alias desconocido.


Solo tuve este problema.

Asegúrese de que no haya espacio en el nombre de la entidad en la base de datos.

por ejemplo, ''user_name'' en lugar de ''user_name''


Su alias definido no es bienvenido por la cláusula WHERE usted debe usar la cláusula HAVING para este

SELECT u_name AS user_name FROM users HAVING user_name = "john";

O puede usar directamente el nombre de columna original con el WHERE

SELECT u_name AS user_name FROM users WHERE u_name = "john";

Igual que tiene el resultado en el alias definido por el usuario como resultado de la subconsulta o de cualquier cálculo, se accederá a él mediante la cláusula HAVING no mediante el WHERE

SELECT u_name AS user_name , (SELECT last_name FROM users2 WHERE id=users.id) as user_last_name FROM users WHERE u_name = "john" HAVING user_last_name =''smith''


Tuve el mismo problema, esto me pareció útil.

mysql_query("SELECT * FROM `users` WHERE `user_name`=''$user''");

recuerde poner $ user en '''' comillas simples.


Ya sea:

SELECT u_name AS user_name FROM users WHERE u_name = "john";

o:

SELECT user_name from ( SELECT u_name AS user_name FROM users ) WHERE u_name = "john";

Este último debería ser el mismo que el anterior si el RDBMS admite el empuje del predicado en la vista en línea.


corregido

SELECT u_name AS user_name FROM users WHERE u_name = ''john'';


prueba tu tarea usando la condición IN o la condición O y también esta consulta está trabajando en spark-1.6.x

SELECT patient, patient_id FROM `patient` WHERE patient IN (''User4'', ''User3'');

o

SELECT patient, patient_id FROM `patient` WHERE patient = ''User1'' OR patient = ''User2'';


SELECT user_name FROM ( SELECT name AS user_name FROM users ) AS test WHERE user_name = "john"


select u_name as user_name from users where u_name = "john";

Piénselo de esta manera, su cláusula where evalúa primero, para determinar qué filas (o filas unidas) deben devolverse. Una vez que se ejecuta la cláusula where, la cláusula select se ejecuta para ello.

Para decirlo mejor, imagina esto:

select distinct(u_name) as user_name from users where u_name = "john";

No puedes hacer referencia a la primera mitad sin la segunda. Donde siempre se evalúa primero, luego la cláusula de selección.