2011-01-15 15 views
7

Al utilizar MySQL SELECT, ¿puede cambiar el valor de un campo devuelto basado en otros campos?Al usar SELECT, ¿puede modificar el valor de un campo devuelto basado en otros campos?

Por ejemplo, si tengo este selecto:

SELECT city,state,country FROM table 

Ahora bien, si la ciudad está vacía y el estado está vacía, quiero que el valor de un país a devueltos vacíos, así (ya sea país en realidad tiene un valor o no)

mesa

Ejemplo:

id | city | state | country 
----------------------------- 
1 | Here | There | MyCountry 
2 |  |  | YourCountry 

Así que con la tabla anterior, quiero los resultados para id = 1 para volver aquí, allí, MyCountry pero los resultados para id = 2 debería estar vacío, vacío, vacío

Gracias

EDIT: Para aclarar, una cláusula WHERE no funcionará porque necesito la fila devuelta incluso si la ciudad y el estado están vacías. Un mejor ejemplo podría haber sido SELECT id, ciudad, estado, país FROM my_table

+0

Para aclarar - es lo que definitivamente quiere una fila devuelto si no hay datos disponibles de la ciudad o del estado? –

+0

sí, sí necesito la fila devuelta, incluso si no hay datos de ciudad o estado – jsherk

Respuesta

8

Actualizar (erratas corregidas):

SELECT city,state, 
CASE 
WHEN (city IS NULL OR city='') AND (state IS NULL or state='') THEN '' 
ELSE country 
END as country_1 
FROM `table` 

También puede utilizar IF en lugar de CASE:
IF ((city IS NULL OR city='') AND (state IS NULL or state=''),'',country) as country_1

+0

Eso es excelente ... ¡gracias! ¡Es fácil una vez que sabes lo que estás buscando! Está en Funciones de control de flujo aquí (del manual mysql v5): http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html Esto es lo que realmente terminé haciendo: SELECCIONE city, state, if (city = '' AND state = '', '', country) como country FROM table – jsherk

0

¿Por qué no utiliza una cláusula WHERE?

Por ejemplo:

SELECT city, state, country FROM <table> WHERE (city <> "" OR state <> ""); 

N.B .: Tendrá que sustituir el '<> ''' por encima de 'no es nulo' si estos son en realidad anuladas en lugar de simplemente vacío.

+0

-1. Eso no es lo que pidió el OP; su consulta devolvería una fila, la suya devolvería dos. –

+0

@ Adam Maras - Entonces, ¿está bajando la votación porque sugerí una respuesta alternativa (y tal vez más adecuada) que la que el OP específicamente solicitó? –

+0

No puede llamarlo más apropiado cuando el OP ** específicamente ** solicitó que la consulta devuelva de cierta manera. OP fue muy claro sobre la funcionalidad prevista. –

1

a1ex07 es correcto, pero necesita corregir algunos errores de consulta en su SELECT stmt.

primero, falta una coma después de "estado" y en segundo lugar, si su tabla realmente se llama "tabla", debe incluir los respaldos porque es una palabra reservada de MySQL.

SELECT city,state, 
CASE 
WHEN (city IS NULL OR city='') AND (state IS NULL or state='') THEN '' 
ELSE country 
END as country_1 
FROM `table`` 

(exlude segundo acento grave, stackoverflow utiliza los de resaltado de sintaxis si sola.)

+0

+1. Gracias por corregir. – a1ex07

+0

Gracias por notar las correcciones. No, el nombre de mi tabla no es realmente tabla, solo lo uso como ejemplo, pero es un buen recordatorio de que debería estar en los palos de fondo. – jsherk

Cuestiones relacionadas