postgresql - 根据多个参数搜索 postgres 表,但不需要全部
问题描述
我正在尝试创建一个查询,在其中根据 4 个值搜索 1 个表。这些值都不是必需的,它应该基于所有这些值返回。
如果始终提供所有值,以下是我将如何执行此操作。
CREATE OR REPLACE FUNCTION "GetValues"(
"@value1" TEXT,
"@value2" TEXT,
"@value3" TEXT
"@value4" TEXT
)
RETURNS TABLE(
"id" UUID,
"@value1" TEXT,
"@value2" TEXT,
"@value3" TEXT
"@value4" TEXT
) AS
$func$
BEGIN
RETURN QUERY SELECT
c."id",
c."value1",
c."value2",
c."value3",
c."value4"
FROM "values" AS v
WHERE "value1" = "@value1"
AND "value2" = "@value2"
AND "value3" = "@value3"
AND "value4" = "@value4";
END;
$func$ LANGUAGE PLPGSQL;
以下是我想象的方式,但我无法在其中工作。
IF ("@value1" IS NOT NULL) THEN
WHERE "value1" = "@value1"
END IF;
我是否应该做许多单独的 SELECTS,然后将它们与 UNION 结合起来?我认为这行不通,因为我只想显示符合所有条件的内容?
解决方案
SELECT
"id",
"value1",
"value2",
"value3",
"value4"
FROM "values"
WHERE "value1" = COALESCE("@value1", "value1")
AND "value2" = COALESCE("@value2", "value2")
AND "value3" = COALESCE("@value3", "value3")
AND "value4" = COALESCE("@value4", "value4")
不相关但很重要。在双引号中使用表名或列名肯定不会让生活更轻松。表的名称“值”可能被认为是一种不好的做法。
推荐阅读
- python - 如何将 Pandas 中的非零条目转换为带有列表的 dict?
- android - 单击后突出显示 ActionMenuView 中的菜单项
- c# - 实体框架 (MVC) - 为具有受保护属性的模型创建控制器时出现问题
- python - 如何编写带循环的函数
- mysql - 我需要为同一列使用 2 个索引还是一个就足够了?
- excel - excels“文件来源”的熊猫等价物
- css - css grid - 让网格向下而不是跨越五个相等的列
- php - 如何在 PHP 中安排定期更新 MySQL 数据库?
- javascript - 在 tensorflow JavaScript 中使用posenet时内存泄漏
- groovy - 在 groovy 中,如何返回零填充范围?