soporta segundo por optimizar mysqli_result lentas fetch_array ejemplo cuantas consultas consulta assoc mysql

mysql - segundo - Devolviendo un valor incluso si no hay resultado



optimizar consultas lentas mysql (5)

Como está buscando 1 registro, (LÍMITE 1) esto funcionará.

(SELECT field1 FROM table WHERE id = 123) UNION (SELECT ''default_value_if_no_record'') LIMIT 1;

Puede ser una forma útil de mostrar valores predeterminados o indicar que no se han encontrado resultados. Lo uso para informes.

Consulte también http://blogs.uoregon.edu/developments/2011/03/31/add-a-header-row-to-mysql-query-results/ para ver una forma de usar esto para crear encabezados en los informes.

Tengo este tipo de consulta simple que devuelve un campo entero no nulo para un ID determinado:

SELECT field1 FROM table WHERE id = 123 LIMIT 1;

La cosa es que si no se encuentra el ID, el conjunto de resultados está vacío. Necesito que la consulta siempre devuelva un valor, incluso si no hay un resultado.

Tengo esta cosa funcionando pero no me gusta porque se ejecuta 2 veces la misma subconsulta:

SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);

Devuelve cualquiera de los campos1 si existe la fila, de lo contrario 0. ¿Alguna forma de mejorar eso?

¡Gracias!

Edite después de algunos comentarios y respuestas : sí, tiene que estar en una sola declaración de consulta y no puedo usar el truco de conteo porque necesito devolver solo 1 valor (FYI ejecuto la consulta con el método Java / Spring SimpleJdbcTemplate.queryForLong () ).


Haga la búsqueda con la LEFT OUTER JOIN . No sé si MySQL permite VALUES en línea en cláusulas de unión, pero puede tener una tabla predefinida para este propósito.


MySQL tiene una función para devolver un valor si el resultado es nulo. Puedes usarlo en toda una consulta:

SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,''not found'');



Puedes usar COALESCE

SELECT COALESCE(SUM(column),0) FROM table