PostgreSQL:使用 CASE 在 where 子句中添加条件
PostgreSQL: Add condition in where clause using CASE
我正在使用 PostgreSQL 8.2,我也是 PostgreSQL 的新手。
我必须根据字段的特定值 (49) (activity.type) 在 WHERE 子句中添加一个条件。这是我的查询:
SELECT activity.*
FROM activity
LEFT JOIN event_types ON activity.customstatusid = event_types.id, getviewableemployees(3222, NULL) AS report
WHERE
(
CASE WHEN activity.type = 49 THEN
'activity.individualid IN(SELECT individualid from prospects where prospects.individualid = activity.individualid)'
ELSE 1
END
)
AND activity.date BETWEEN '2016-10-01' AND '2016-10-06'
AND activity.type IN (21, 22, 49, 50, 37, 199)
AND (event_types.status = 1 or event_types.status IS NULL);
当我在 PGSQL 的命令行访问中 运行 以上查询时,出现以下错误:
ERROR: invalid input syntax for integer: "activity.individualid IN(SELECT individualid from prospects where prospects.individualid = activity.individualid)"
我在这里缺少什么?
将您的 where 子句实现为:
WHERE (
activity.type != 49 OR
activity.individualid IN (
SELECT individualid from prospects
WHERE prospects.individualid = activity.individualid)
)
AND activity.date BETWEEN '2016-10-01' AND '2016-10-06'
AND activity.type IN (21, 22, 49, 50, 37, 199)
AND (event_types.status = 1 or event_types.status IS NULL);
第一个子句只有在以下任一情况下才为真:
activity.type != 49
;或
activity.type == 49
和 activity.individualid
在子查询中找到。
我正在使用 PostgreSQL 8.2,我也是 PostgreSQL 的新手。
我必须根据字段的特定值 (49) (activity.type) 在 WHERE 子句中添加一个条件。这是我的查询:
SELECT activity.*
FROM activity
LEFT JOIN event_types ON activity.customstatusid = event_types.id, getviewableemployees(3222, NULL) AS report
WHERE
(
CASE WHEN activity.type = 49 THEN
'activity.individualid IN(SELECT individualid from prospects where prospects.individualid = activity.individualid)'
ELSE 1
END
)
AND activity.date BETWEEN '2016-10-01' AND '2016-10-06'
AND activity.type IN (21, 22, 49, 50, 37, 199)
AND (event_types.status = 1 or event_types.status IS NULL);
当我在 PGSQL 的命令行访问中 运行 以上查询时,出现以下错误:
ERROR: invalid input syntax for integer: "activity.individualid IN(SELECT individualid from prospects where prospects.individualid = activity.individualid)"
我在这里缺少什么?
将您的 where 子句实现为:
WHERE (
activity.type != 49 OR
activity.individualid IN (
SELECT individualid from prospects
WHERE prospects.individualid = activity.individualid)
)
AND activity.date BETWEEN '2016-10-01' AND '2016-10-06'
AND activity.type IN (21, 22, 49, 50, 37, 199)
AND (event_types.status = 1 or event_types.status IS NULL);
第一个子句只有在以下任一情况下才为真:
activity.type != 49
;或activity.type == 49
和activity.individualid
在子查询中找到。