2012-07-11 17 views
6

he cometido un error y entraron:SQL con Limit1 devuelve todos los registros

SELECT * FROM table LIMIT1

en lugar de

SELECT * FROM table LIMIT 1 (tenga en cuenta el espacio entre LIMIT y 1)

en el CLI de MySQL . Esperaba recibir algún tipo de error de análisis, pero me sorprendió, porque la consulta devolvió todos los registros en la tabla. Mi primer pensamiento fue "Estúpido MySQL, apuesto a que esto devolverá el error en PostgreSQL", pero PostgreSQL también devolvió todos los registros. Luego lo probé con SQLite, con el mismo resultado.

Después de algunas excavaciones, me di cuenta de que no importa lo que ingrese después de la mesa. Mientras no hay WHERE/ORDER/GROUP cláusulas:

SELECT * FROM table SOMETHING -- works and returns all records in table 

SELECT * FROM table WHERE true SOMETHING -- doesn't work - returns parse error 

supongo que este es un comportamiento normalizado, pero no pude encontrar ninguna explicación de por qué es eso. ¿Algunas ideas?

+4

Se puede dar cualquier tabla un alias en una consulta. Esto le permite realizar autocombinaciones (especifique la misma tabla más de una vez). –

+2

@ NikolaMarkovinović Spot on.El OP tiene un alias de 'table' como' LIMIT1' Deberías publicar como respuesta. –

+1

Sugiera que la única etiqueta que pertenece aquí es 'sql' – Smandoli

Respuesta

12

Su primera consulta es equivalente a esta consulta utilizando un alias de tabla:

SELECT * FROM yourtable AS LIMIT1 

El AS palabra clave es opcional. El alias de la tabla le permite consultar las columnas de esa tabla utilizando el alias LIMIT1.foo en lugar del nombre de la tabla original. Puede ser útil usar alias si desea dar a las tablas un alias más corto o más descriptivo dentro de una consulta. Es necesario usar alias si se une a una tabla a sí mismo.

Desde el SQL lite documentation:

AS keyword optional

+0

¡Oooh! Buen gráfico! ¡Voto! – Smandoli

+0

Maldición, se olvidó de eso. Siempre uso la sintaxis 'AS'. Aceptaré la respuesta en 10 minutos, gracias. – strkol

+0

Odio tanto estos tipos de gráficos oradoc: D – Sebas

0
SELECT * FROM table LIMIT1; 

LIMIT1 Esto ha tomado como alias de SQL, causan LIMIT1 no es un literal reservada de SQL. Algo después del nombre de la tabla y que no es una palabra clave reservada siempre tomada como un alias de tabla por SQL.

SELECT * FROM table LIMIT 1; 

Cuando se utiliza LIMIT justo después del nombre de la tabla, SQL encontró que a medida que una palabra clave reservada y trabajado para ello de acuerdo con el comportamiento. SI desea utilizar palabras clave reservadas en la consulta, puede hacerlo colocando literales reservados entre comillas. como ..

SELECT * FROM table `LIMIT`; 

O

SELECT * FROM table `LIMIT 1`; 

Ahora todas las palabras cubiertos por `` cotizaciones serán tratados como definido por el usuario. Comúnmente confundimos con fecha, marca de tiempo, límite, etc. palabras clave utilizándolas como nombres de columna.

+1

OP no obtuvo ningún error ... OP esperaba ERROR ... –

Cuestiones relacionadas