我可以在MySQL中以很多条件重用where子句吗?

问题描述 投票:0回答:1

我正在将许多MySQL查询从在Node.js应用程序中的硬编码迁移到存储过程(供Java应用程序使用)。在原始的Node应用程序中,有一个SQL条件保存为常量字符串,并作为where子句的一部分替换为许多不同的SQL函数,而我无法弄清楚如何使用MySQL存储函数来完成相同的事情。

常量是一个SQL字符串,用于检查用户对象上的各种属性是否为空:

const USER_INFO_NOT_NULL = `u.id IS NOT NULL \
  AND u.email IS NOT NULL \
  AND u.gender IS NOT NULL \
  AND u.date_of_birth IS NOT NULL \
  AND u.first_name IS NOT NULL \
  AND u.last_name IS NOT NULL`

此SQL语句被替换为许多不同的查询,作为其WHERE语句中的条件之一。

例如:

SELECT COUNT(*) count
    FROM User u
    WHERE ${USER_INFO_NOT_NULL} 
        AND some_other_condition
        AND another_condition
...

不幸的是,并非所有查询都像上面的查询那样简单,重写每个查询将需要大量的工作。

我已经尝试过使用存储的函数,但是,存储的函数只能将标量值用作参数,因此无法传递用户行。

我还尝试让该函数获取用户ID(由于查询已经查询了该用户,因此不理想),查询该用户并根据上述条件返回一个布尔值。但是,我不确定如何在存储的函数中将SELECTRETURN合并(可以执行此操作吗?)。

我研究了准备好的语句,但是,它们似乎不以这种方式工作,因为它们仅支持有限数量的SQL命令。

因此,是否有一种方法可以仅使用MySQL功能来做与Node.js应用程序中已经存在的相似的事情?

我正在将许多MySQL查询从在Node.js应用程序中的硬编码迁移到存储过程(供Java应用程序使用)。在原始的Node应用程序中,有一个SQL条件保存为常量字符串...

mysql
1个回答
3
投票

您可以定义视图。

© www.soinside.com 2019 - 2024. All rights reserved.