我正在寻找一种在JasperReport中使用IN关键字的方法。我的查询如下:
SELECT * FROM table_name WHERE CID IN (145,45, 452);
在jasper报告中我可以设置这个;
SELECT * FROM table_name WHERE CID IN ($P{MY_CIDS});
从我的Java中我将$P{MY_CIDS}
作为String
发送,因此我的查询将如下所示
SELECT * FROM table_name WHERE CID IN ("145,45, 452");
我的问题是如何将SQL "145,45, 452"
转换为有效查询,以便分别考虑每个值145
,45
,452
感谢所有帮助。
答案 0 :(得分:3)
WHERE FIND_IN_SET(CID, "145,45,452")
但是这个查询总是会导致表格扫描。因此,我建议您重写代码并使用正确的IN (A, B, C)
语法。
答案 1 :(得分:1)
你有两种选择。更常见的是改写你的查询,而不是:
SELECT * FROM table_name WHERE CID IN (?, ?, ?, ..., ?);
我不确定对方是否对MySQL有效,但它在PostgreSQL中运行良好。它是使用一个不可变函数将字符串解析为一组整数,而不是使用:
SELECT * FROM table_name WHERE CID IN (split_to_int(?));
答案 2 :(得分:0)
SELECT * FROM table_name WHERE CID IN ($P!{MY_CIDS});
只需使用
$P!{MY_CIDS}
($ strong和{MY_CIDS}之间的感叹号)。
Jasper现在将这样的字符串连接起来:
"SELECT * FROM table_name WHERE CID IN ("
+"145,45,452"
+")";
导致:
SELECT * FROM table_name WHERE CID IN (145,45,452);
花了很长时间才得到它,但现在它对我有用。“