如何在WHERE中写入正确的PROCEDURE子句,这取决于数组中的参数,其默认值为NULL。
我的尝试
DELIMITER //
CREATE PROCEDURE `task`(IN param1 TEXT, IN param2 TEXT)
BEGIN
SELECT *
FROM customer
LEFT JOIN items
ON customer.id = items .id
WHERE
CASE
WHEN param1 is NULL OR param1 = "" then " " else id IN (param1)
END
CASE
WHEN param2 is NULL OR param2 = "" then " " else name IN (param2)
END
END//WHERE子句应该检查每个参数是否为null,如果为null,则转到下一个参数,如果不是,它应该执行公式f.e.q `name` IN (param2),然后检查next param
我想从这个查询中得到类似的结果。
SELECT *
FROM customer
LEFT JOIN items
ON customer.id = items .id
WHERE 1=1
" . (($this->params["param1"]==array())?"" : "AND id IN (:param1)") . "
" . (($this->params["param2"]==array())?"" : "AND item IN (:param2)") . "发布于 2022-06-13 05:49:34
我建议采用另一种查询:
SELECT *
FROM customer
LEFT OUTER JOIN items ON customer.id = items .id
WHERE FIND_IN_SET(id, param1) OR FIND_IN_SET(name, param2)输入参数是字符串,而不是数组。MySQL没有数组类型。
阅读有关函数发现_在……里面_SET()的内容。它搜索包含逗号分隔列表的字符串。
请注意,此查询很难优化。它不会在id或name上使用索引,因此它必须执行表扫描。如果表很大,这将不利于性能。
https://dba.stackexchange.com/questions/313263
复制相似问题