3

我在我的网络应用程序中运行以下 sql 查询:

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

我期待结果为(布尔数据),但我得到'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返回真/假而不是't'/'f'?

谢谢。

4

4 回答 4

19

你是如此接近

SELECT EXISTS (SELECT id FROM user WHERE membership=1244)::int 
于 2013-07-23T15:28:11.683 回答
4

试试看CASE

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

我的测试小提琴

于 2013-07-23T14:30:26.613 回答
4

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

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

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

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

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

于 2013-07-23T16:00:59.923 回答
0

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

SELECT id FROM user WHERE membership=1244

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

于 2013-07-23T17:40:11.993 回答