我不想写这样的两个语句
if(filter_by_company) {
query..
} else {
query...
}
因此,选择用户,他们属于公司,而我作为管理员可以按公司 ID 进行筛选。我如何表示当筛选不存在时不满足条件?
SELECT * FROM users u
LEFT JOIN clients c
ON c.id = u.company_id
WHERE c.company_id = 'NAME' IF EXISTS ?? ELSE DONT ASK
我该怎么做?
假设您要将其作为位置参数传递
company_id
,请连续传递两次(null
如果不传递,请传入您的编程语言filter_by_company
):如果您的客户端允许命名参数,您可以使用:
或其他等效的参数语法。
我认为您问的是如何编写一个查询,它既可以处理按公司过滤,又可以处理不按公司过滤。
和
有两种方法。第一种方法是尝试将其构建为一个查询。第二种方法是使用更灵活的方法来构建查询。
要通过一个查询完成此操作,您需要传入一个布尔标志来确定是否按公司进行过滤。
演示。
这对于简单的事情来说是可以接受的,但是这种技术非常有限,并且会导致不必要的复杂查询。
更好的方法是使用 SQL 查询生成器来构建查询。然后,您可以编写通用查询并在其上添加子句。您使用什么取决于您选择的编程语言,对于这些示例,我们将使用Knex.js。
首先,建立基本查询。
并根据需要添加。
filter_user_by_client
是一个新对象,user_client_query
不受影响。这种技术的优点在于您可以添加限制、顺序、更多 where 子句、更多连接等等。
它会为您适应 SQL 方言。
试试这个