Ver la Versión Completa : Exists or not Exists that is the question
Exists or not Exists that is the question
Mi duda es más bien filosófica y es la siguiente:
Si hago esta consulta:
SELECT CAMPO
FROM TABLA
WHERE CONDICION
En en caso de que no existiera para esa condicion un valor de campo, nulo o no, como podría hacer para que CAMPO devuelva 0.
Si existiera un registro y CAMPO fuera NULL, la siguiente seria la solución (un NVL, igualmente, segun el motor de BD que use)
SELECT IFNULL(CAMPO,0)
FROM TABLA
WHERE CONDICION
Pero si no existe registro, no devolverá nada, y yo quiero que me devuelva 0.
Es posible?
NOTA: sin usar COUNT.
Saludos
Al González
04-04-2009, 23:43:40
¡Hola!
No mencionas qué motor utilizas, pero en Firebird funciona bien esto:
Select Coalesce (Campo, 0) As Campo From Tabla
Right Outer Join RDB$DataBase On 1 = 1
El truco es hacer una unión exterior por la derecha con una tabla o cursor que tenga uno y sólo una fila.
Saludos a cualesquiera.
Al González. :)
No mencionas qué motor utilizas.(...)
En realidad Al, es una duda existencialista que tengo, más alla del motor a usar, por eso el toque filosófico.
Porque si analizamos lo real, si vos no tenes dinero, podriamos decir que tenés 0 monedas, con lo cual la nada (null) tendría un valor tangible.
Al margén de si tendria sentido o no almacenar un valor 0 o inexistente de algo.
Es una cuestión lógica, para ser pobre al menos hay que tener nada, con lo cual la nada tiene valor, asi sea nulo o despreciable, y asi cualquier combinación posible.
Si bien pareciera ser una pregunta extraordinariamente rara, estoy enfocando el análisis hacia un desarrollo sobre el modelado de datos inexistentes o absurdos, sobre factibles relaciones combinacionales inexistentes, es un tema bastante complejo, y esta relacionado hacia el análisis genético. Es un modelo matemático en el cual, cuando no sabemos el resultado, al menos sabemos lo que NO puede ser, no se si me explico.
Volviendo a la razón, estoy utilizando mySQL (4.1/5)
Saludos
javier7ar
05-04-2009, 00:21:00
en SQL Server podes hacer esto:
select isNull((select CAMPO from TABLA where CONDICION),0) as NombreCampo
Nota: debe ir con esos parentesis, si los sacas da error de sintaxis, asi que copialo tal cual
Saludos
en SQL Server podes hacer esto:
Código SQL [-] (http://www.clubdelphi.com/foros/#)
select isNull((select CAMPO from TABLA where CONDICION),0)
Nota: debe ir con esos parentesis, si los sacas da error de sintaxis, asi que copialo tal cual
Saludos
NO Javier.
ISNULL, sería como IFNULL, y hasta un DECODE o CASE comparando si es NULL, porque el NULL es el resultado de la existencia de un campo cuyo valor es nulo, pero si no existe registro? NULL sería siendo NULL.
Ejemplo, si tengo 3 campos, y uno de ellos es NULL con esa funcion SI podria devolver 0, pero si no existe ninguno de los 3 campos? NULL es NULL, no puede ser NULL lo que no existe, he aquí el dilema en cuestión.
Saludos
javier7ar
05-04-2009, 00:45:27
no MaMu, probalo que eso anda, pero solo funciona cuando el select de adentro devuelve 1 sola fila o no devuelve ninguna fila (porque cuando no devuelve ninguna en SQL Server se puede tomar como NULL) si devuelve mas de una fila te va a dar error. Probalo
Saludos
javier7ar
05-04-2009, 00:59:50
otra cosa a tener en cuenta, si trabajas con delphi, supongo que vas a tener una consulta con este SQL
select CAMPO
from TABLA
where CONDICION
al abrir la Query, si el valor de CAMPO es NULL o si la Query esta vacia (no se devolvieron filas como el caso que planteas) el valor de Query['CAMPO'] va a ser NULL en los dos casos, y ahi es donde tenes que aplicar la funcion isNull (en el codigo del Delphi) Por lo menos asi soluciono yo estos temas.
Entonces te quedaria asi:
Query.Open;
variable:=isNull(Query['CAMPO'],0);
Query.Close;
Funciona tanto para cuando el campo es NULL o para cuando no hay resultado.
Nota: La funcion isNull en Delphi no existe, asi que la tenes que hacer vos, seria algo asi:
Function IsNull(A,B:Variant):Variant;
begin
if (A <> NULL) then
isNull:=A
else
isNUll:=B;
end;
javier7ar
Bueno pensándolo como lo expusiste es una buena idea. Lo voy a probar.
Saludos
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.