拼图:替代SQL语法

时间:2011-05-10 00:43:23

标签: sql

我一直在努力解决这个难题,我最后一点都被困住了。我在SQL查询中有一个SQL语句:

UPDATE courses SET pid=? WHERE course_name=?;

传递参数并按顺序替换?s :( query,“Biology”,345533)。

如何更改我的SQL语法(即切换pid =?和course_name =?的顺序),将“Biology”指向course_name,将345533指向pid?

规则:只允许一(1)条SQL语句。无法更改参数的顺序。

3 个答案:

答案 0 :(得分:1)

假设Cade Roux在所需的方面走在正确的轨道上,你可以尝试:

Update c
Set pid =   Case
                When course_name = ? Then ?
                Else pid
                End

答案 1 :(得分:0)

不确定c是否是ANSI规则的可更新集,但我会在一分钟内在真实平台中尝试...

WITH c AS (
    SELECT *
    FROM courses
    WHERE course_name = ?
)
UPDATE c
SET pid = ?

这似乎在T-SQL(SQL Server 2005和up支持公用表表达式)中运行良好,并且http://data.stackexchange.com/stackoverflow/q/100124/处有一个可运行的示例

答案 2 :(得分:0)

UPDATE C SET C.pid=D.pid
  FROM COURSES C
  JOIN (SELECT ? AS course_name, ? AS pid) D ON D.course_name = C.course_name

这适用于SQL Server(2008),但据我所知,它不符合ANSI标准。