多次使用相同的参数

时间:2016-04-03 16:07:16

标签: sqlite parameters query-parameters

我有一个sql-select(或insert),它多次使用相同的两个参数。 有没有办法避免为每个"?,?,?,?,..."使用多个相同的参数。在列表中?

cursor.execute(statement, list)

我可以想到两个命名参数但没有代码注入的可能性。

在下面的示例中,每个左边"?" RESP。对#34;?"是相同的字符串。我在一个陈述中使用了七个计数以获得一个结果。

select count(case (aart like "1%")  and (adatum between ? and ?) when 1 then 1 else null end) as AufExt, 
       count(case (aart like "1%E") and (adatum between ? and ?) when 1 then 1 else null end) as AufExtE,
       count(case (aart like "1%K") and (adatum between ? and ?) when 1 then 1 else null end) as AufExtK,
       count(case (aart like "2S%") and (adatum between ? and ?) when 1 then 1 else null end) as AufInt,
       count(case (eart like "3%")  and (edatum between ? and ?) when 1 then 1 else null end) as EntExt, 
       count(case (eart like "3%K") and (edatum between ? and ?) when 1 then 1 else null end) as EntExtK,
       count(case (eart like "2S%") and (edatum between ? and ?) when 1 then 1 else null end) as EntInt
from tabelle

此问题的相关问题:看起来好像没有在" case"中使用索引。正确的吗?

2 个答案:

答案 0 :(得分:1)

documentation说:

  

未附加数字的问号会创建一个参数,其数字大于已分配的最大参数编号。 [...]
  ?NNN 问号后跟一个数字 NNN ,其中包含 NNN -th参数的位置。 [...]
  :AAAA 冒号后跟标识符名称,其中包含名称为AAAA的命名参数的位置。命名参数也编号。 [...]为避免混淆,最好避免混合命名参数和编号参数。

答案 1 :(得分:0)

您还可以添加以下子句:

with
  parms as (select ? as parm1, ? as parm2)

选择计数(case(aart like“1%”)和(parms.parm1和parms.parm2之间的adatum)当1然后1 else null结束时)作为AufExt    ...