Al hacer una consulta MySQL sin restricciones DONDE, la mayoría de las personas usan WHERE 1 en la consulta. Sin embargo, omitir DONDE 1 no influye en la consulta. ¿Hay diferencia entre los dos? ¿Se considera que uno es la mejor práctica?Importancia de DONDE 1 en consultas MySQL
Respuesta
No creo que sea una cuestión de mejores prácticas, pero a veces la gente lo usa para hacer las consultas dinámicas un poco más fáciles.
string sql = "SELECT * FROM mytable WHERE 1 ";
if (somecondition) {
sql += "AND somefield = somevalue ";
}
if (someothercondition) {
sql += "AND someotherfield = someothervalue ";
}
... etc
Sin la WHERE 1
ahí que tendría que comprobar en cada bloque de if
si necesitaba para poner en un WHERE
o un AND
.
No es necesario. 99.9% del tiempo significa que la consulta fue construida dinámicamente y poner en WHERE 1
conduce a una lógica más simple para las cláusulas condicionales dinámicas, lo que significa que puede seguir agregando AND id = 3
al final de la consulta y no romperá la sintaxis. Si no tiene WHERE 1
, tiene que preocuparse de si existe o no una cláusula WHERE
y de si su condición es anterior al AND
o no.
Así que es simplemente la pereza, básicamente.
Es un caso de esquina menos para generadores de código automatizados y otros manipuladores de instrucciones SQL. Al iniciar la sección de filtrado con where 1
(o where 1 = 1
), su generador de código automatizado solo puede agregar nuevos filtros con el prefijo and
.
De lo contrario, tienden a terminar con un código como:
query = "select * from tbl"
sep = " where "
foreach clause in all_clauses:
query = query + sep + clause
sep = "and "
que no es tan limpia como:
query = "select * from tbl where 1 = 1"
foreach clause in all_clauses:
query = query + " and " + clause
Se debe hacer muy poca diferencia en cualquier DBMS decente desde la ejecución el motor debería quitar ese tipo de cláusulas antes de que se ejecute la consulta.
Si es mejor o no, depende de si prefiere tener un código "más limpio" en los generadores de consultas o si prefiere que los DBA de la empresa intenten rastrearlo y golpearlo hasta la muerte por usarlo cláusulas tontas :-) Por supuesto, si está utilizando MySQL, puede ser DBA, por lo que puede no ser un problema.
- 1. MySQL: Join (2 mesas) vs consultas individuales (1 mesa)
- 2. múltiplo de Linq donde consultas
- 3. Consultas jerárquicas en MySQL
- 4. MySQL EN DONDE()
- 5. MySQL, donde todo en
- 6. PHP MySQL donde la longitud es más larga que 1
- 7. usando donde y unión interna en mysql
- 8. MySQL en donde
- 9. ¿Por qué una consulta sql tiene "donde 1 = 1"
- 10. Consultas MySQL anidadas
- 11. Prueba de Moq LINQ Donde consultas
- 12. MySQL CASO DONDE ... ... then
- 13. Caché de consultas MySQL
- 14. Simular consultas de mysql
- 15. Analizador de consultas MySQL
- 16. ... donde recuento (col)> 1
- 17. ¿Cuál es la importancia de 1/1/1753 en SQL Server?
- 18. ¿Cuál es la importancia del orden de las declaraciones en la salida de explicación de mysql?
- 19. MySQL consultas lentas
- 20. SELECCIONE DONDE IN en node-mysql
- 21. Creador de consultas PHP MySQL
- 22. Matriz en Mysql ¿DONDE ME GUSTA?
- 23. Consultas de búsqueda de PHP mysql
- 24. Cómo registrar consultas de error en mysql?
- 25. ¿Cómo ejecutar dos consultas mysql como una en PHP/MYSQL?
- 26. Alternativa a 'donde col en (lista)' para MySQL
- 27. ¿Cómo rastrear consultas MySql usando MySql-Proxy?
- 28. Optimización de MySQL Query - consultas internas
- 29. SPARQL múltiple "INSERT donde" las consultas en una sola petición
- 30. ¿Agregar 'LIMIT 1' a las consultas de MySQL las hace más rápidas cuando sabes que solo habrá 1 resultado?
+1 eres más rápido que yo: P – Diadistis
@Eric ¿hay una diferencia de velocidad entre 'WHERE 1' y' WHERE 1 = 1'? – fire
@fire - no tengo idea, harías pruebas para averiguarlo, pero creo que cualquier optimizador decente eliminaría ambas expresiones como irrelevantes para la consulta. –