在sql查询中多次使用相同的参数

谢丽娜

我正在使用 pyodbc 和 Microsoft SQL Server

我正在尝试在 python 中复制一个存储过程,其中为每个 @currentSurveyId 执行此查询

SELECT *
                FROM
                (
                    SELECT
                        SurveyId,
                        QuestionId,
                        1 as InSurvey
                    FROM
                        SurveyStructure
                    WHERE
                        SurveyId = @currentSurveyId
                    UNION
                    SELECT 
                        @currentSurveyId as SurveyId,
                        Q.QuestionId,
                        0 as InSurvey
                    FROM
                        Question as Q
                    WHERE NOT EXISTS
                    (
                        SELECT *
                        FROM SurveyStructure as S
                        WHERE S.SurveyId = @currentSurveyId AND S.QuestionId = Q.QuestionId
                    )
                ) as t
                ORDER BY QuestionId

在 Python 中,我到目前为止有:

cursor.execute("""SELECT UserId FROM dbo.[User]""")
allSurveyID = cursor.fetchall()

for i in allSurveyID:
    p = i
    test = cursor.execute("""SELECT *
                FROM
                (
                    SELECT
                        SurveyId,
                        QuestionId,
                        1 as InSurvey
                    FROM
                        SurveyStructure
                    WHERE
                        SurveyId = (?)
                    UNION
                    SELECT 
                        (?) as SurveyId,
                        Q.QuestionId,
                        0 as InSurvey
                    FROM
                        Question as Q
                    WHERE NOT EXISTS
                    (
                        SELECT *
                        FROM SurveyStructure as S
                        WHERE S.SurveyId = (?)AND S.QuestionId = Q.QuestionId
                    )
                ) as t
                ORDER BY QuestionId""",p)

for i in test:
    print(i)

该参数在使用一次时有效(如果我从 UNION 开始删除所有内容)。当尝试在查询的其余部分使用相同的参数时,我收到以下错误:('SQL 包含 3 个参数标记,但提供了 1 个参数','HY000')

是否可以在同一个查询中多次使用同一个参数?

谢谢

完美的

如果重用相同的参数值,只需将参数的一项列表相乘:

cursor.execute(sql, [p]*3) 

LEFT JOIN还考虑为(或)重构您的 SQL,FULL JOIN需要两个 qmark:

SELECT DISTINCT
       ISNULL(S.SurveyId, ?) AS SurveyId, 
       Q.QuestionId, 
       IIF(S.SurveyId IS NOT NULL, 1, 0) AS InSurvey 
FROM Question Q
LEFT JOIN SurveyStructure S
  ON S.QuestionId = Q.QuestionId 
  AND S.SurveyId = ?
ORDER BY Q.QuestionId

甚至可能对于一个参数:

SELECT MAX(S.SurveyId) AS SurveyId, 
       Q.QuestionId, 
       IIF(S.SurveyId IS NOT NULL, 1, 0) AS InSurvey 
FROM Question Q
LEFT JOIN SurveyStructure S
  ON S.QuestionId = Q.QuestionId 
  AND S.SurveyId = ?
GROUP BY Q.QuestionId, 
         IIF(S.SurveyId IS NOT NULL, 1, 0)
ORDER BY Q.QuestionId

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在具有相同元素名称的FOR XML Path T-SQL查询中多次使用属性

Cognos报表-多次使用相同参数多次查询1个XLS的选项卡

如何使用javascript中的参数多次调用相同的函数?

优化SQL查询,使用不同的参数进行多次选择

使用 Beautifulsoup 查询显示多次相同的数据

Python Argparse多次使用相同的参数

使用curring多次传递相同的参数链

使用meck使用相同的参数多次调用相同的方法

如何更换?如果在同一个 oracle 查询中多次使用相同的值,则 oracle sql 中的值

在查询中多次使用 CTE

SQL 查询:可以使用相同的查询参数一次搜索两列吗?

在JVM中多次使用相同的命名组?

在Python的argparse中多次使用相同的选项

避免在 appsettings 中多次使用相同的 url

SQL多次使用子查询表

使用SQL查询多次重复<select>菜单

哪种MongoDB查询在数组中多次找到相同的值?

如何在ruby中多次传递相同的参数

使用不同的参数集多次应用相同的函数

使用不同的参数多次执行相同的asynctask

使用相同的参数JavaScript多次调用一个函数

使用MySQLdb处理SQL查询中的多个参数

使用多个参数查询在SQL Server中不起作用

使用php函数的参数作为SQL查询中的列名

SQL查询中的可选参数

在相同的活动/布局中多次使用相同的片段

使用参数的SQL查询执行

在 postgresql 中多次使用的参数名称

如何在Vue.js中对相同路径、不同查询参数使用router.push