En postgreSQL, ¿cómo puedo devolver una tabla que contenga 0 si mi tabla está vacía y una tabla que contiene 1 si mi tabla tiene filas?Cómo devolver 0 si la tabla está vacía, 1 de lo contrario
tengo que hacerlo en SQL, no usar cualquier otro idioma
En postgreSQL, ¿cómo puedo devolver una tabla que contenga 0 si mi tabla está vacía y una tabla que contiene 1 si mi tabla tiene filas?Cómo devolver 0 si la tabla está vacía, 1 de lo contrario
tengo que hacerlo en SQL, no usar cualquier otro idioma
No creo que eso sea posible usando nada más que SQL. ¿Por qué no puedes usar otro idioma?
Esto hubiera sido mejor como un comentario – WattsInABox
tal vez esto es lo que estás buscando?
select min(c) from (
select count(*) c
from mytab
union
select 1
from mytab
having count(*) > 1)
Uso:
SELECT CASE
WHEN EXISTS (SELECT * FROM foo LIMIT 1) THEN 1
ELSE 0
END
EDITAR: Añadido LIMIT 1 para acelerar la consulta.
¡Esto está tan mal! Esta consulta lee una tabla completa para determinar si está vacía. Para la gran mesa, ¡tardaría años! – Tometzky
¿Podría simplemente agregar un "Top 1" y luego arreglarlo? – GendoIkari
Erm, porque no es SQLServer, Límite 1? – GendoIkari
Podría ser un truco, pero funciona.
SELECT count(*) FROM (SELECT 1 FROM table LIMIT 1) AS t;
Editar: Reescribió un poco. El uso anterior de LIMIT fue incorrecto (no me ayudó en las tablas grandes como lo pretendía).
SELECT, COUNT y LIMIT deberían hacerlo.
-- see below SELECT COUNT(*) FROM X LIMIT 1
Editar:Esto no funciona en Postgres (8.x al menos). Por favor, consulte los comentarios y aquí: http://postgresql.1045698.n5.nabble.com/window-function-count-and-limit-td3233588.html
Happy SQL'ing.
Eso solo limitará el número de filas devueltas a 1, igual devolverá '3' si hay 3 filas. – GendoIkari
Probar:
select sign(count(*)) from mytable
recuento (*) es muy lento para tablas enormes – rmflow
Usted puede poner esta solicitud en un procedimiento almacenado, con el nombre de tabla como parámetro:
CREATE OR REPLACE FUNCTION isEmpty(tableName text, OUT zeroIfEmpty integer) AS
$func$
BEGIN
EXECUTE format('SELECT COALESCE ((SELECT 1 FROM %s LIMIT 1),0)', tableName)
INTO zeroIfEmpty;
END
$func$ LANGUAGE plpgsql;
A continuación, ejecute esta función como esta:
SELECT * FROM isEmpty('my_table_name');
Para que pueda llamarlo con el nombre de su tabla
¿Desea devolver el * valor * 0 o 1 si su tabla tiene filas? ¿O desea devolver una tabla que contenga solo una fila si tiene filas, y nada si no lo hace? – Patrick
Quiero devolver una tabla que contiene el valor 1 si hay filas en mi tabla y una tabla que contiene 0 si no hay nada en esta tabla específica que tengo. – Spawn
¿Es absolutamente necesario devolver un 0 o 1? Si solo quiere un indicador booleano, cualquier valor mayor que 0 se correlacionará con verdadero en su lógica post-db. –