在postgresql查询中检查布尔true/false结果



我正在web应用程序中运行以下sql查询:

SELECT EXISTS (
SELECT id
FROM user
WHERE membership=1244)

我期望结果是true(布尔数据),但我得到的是false的't'或'f'。我如何让它返回到我的lua代码一个标准的布尔值?

我发现了以下帖子:

用PHP 正确读取Postgres中的布尔值

所以我试着把我的代码改成这样:

SELECT EXISTS ::int (
SELECT id
FROM user
WHERE membership=1244)

SELECT ::INT (SELECT EXISTS (
SELECT id
FROM user
WHERE membership=1244))

但是我遇到了语法错误
你能告诉我最好的处理方法吗?我应该以某种方式将结果"t"强制转换为布尔值吗?或者有没有办法告诉postgresql返回true/false而不是't'/'f'?

谢谢。

你离太近了

SELECT EXISTS (SELECT id FROM user WHERE membership=1244)::int 

您的第一个查询确实返回了一个布尔值。t显示为查询的返回值

select exists (select 1);
 exists 
--------
 t

但如果你检查它的类型,它是一个布尔值:

select pg_typeof(exists (select 1));
 pg_typeof 
-----------
 boolean

您必须查看lua的postgresql驱动程序手册,了解如何正确处理它

试用CASE

select       
  (case when exists (SELECT id FROM user WHERE membership = 1244)
    then 1 
    else 0 
  end) as column;

我的测试小提琴

您的初始查询本身就很好:

SELECT id FROM user WHERE membership=1244

您只需要检查它是否返回一行。

最新更新