2012-01-30 15 views
5

Me gusta usar un SELECT en una tabla que quizás contenga algún campo, pero tal vez no. De lo contrario, el valor podría devolverse como NULL, como lo haría JOIN LEFT para las filas no existentes.MySQL SELECCIONE un campo como NULL si no existe en la tabla

Por ejemplo. algo como esto Pseudo-SQL:

SELECT id, email IF EXISTS, name, address FROM users; 

debería funcionar sin errores en una tabla 'usuarios' sin un campo 'email', pero volver email = NULL entonces.

+5

¿Por qué no se conoce la estructura de la mesa? – MMM

+0

Esto podría ser útil: http://stackoverflow.com/questions/5448518/query-to-check-if-field-exists-and-then-return-the-result-set –

+0

Puedo obtener la estructura de una tabla con otras declaraciones sql, pero esto es complejo y costoso. Por otro lado, 'SELECT *' arrojará todas las columnas existentes, sin la necesidad de saber cuáles están allí antes. Así que me gusta obtener esta conveniencia sin una consulta adicional previa. – dronus

Respuesta

2

Lo que quiere puede no hacerse en SQL puro.

Básicamente, desea SQL que pueda seleccionar condicionalmente una columna que podría no existir. Tal SQL no se pudo analizar: todas las columnas seleccionadas deben existir o la consulta no será válida.

Sin embargo, puede lograr este código de aplicación consultando las tablas de catálogo para inspeccionar el esquema de la base de datos a la que está conectado y construir SQL de manera dinámica en función de eso.

Esta consulta puede ayudar a su código de aplicación para construir su consulta:

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'users' 
and TABLE_SCHEMA = 'YOUR-DB-NAME'; 
Cuestiones relacionadas