【问题标题】:Convert UPDATE statement to a SELECT statement将 UPDATE 语句转换为 SELECT 语句
【发布时间】:2011-08-23 07:34:17
【问题描述】:

以下语句更新名为“test”的表中的列。

UPDATE test AS t
INNER JOIN test AS q ON(
    q.ptime = t.ptime
)
SET t.slope_Percentile =(
    (
        SELECT
            count(*)
        FROM
            (
                SELECT
                    *
                FROM
                    test
            )AS t1
        WHERE
            t1.slope < t.slope
    )* 100 /(
        SELECT
            count(*)
        FROM
            (
                SELECT
                    *
                FROM
                    test
            ) AS tz
    )
);

我不想更新列,而是希望收到一个 SELECT 语句,该语句给出每行的读数(如果它是 UPDATE 语句,则会更新)。

有关表格性质和代码目标的更多信息(如果需要)在此处: Efficient assignment of percentile/rank in MYSQL

【问题讨论】:

  • 您应该先修复查询...您以q 的身份加入表中,但您从未在查询中使用它。你正在做 select count(*) from (select * from test) 而只是 select count(*) from test 会做。
  • 这实际上在 MYSQL 中不起作用。它说““您不能在 FROM 子句中指定目标表 'test' 进行更新”

标签: mysql sql


【解决方案1】:
SELECT t.ptime,
( 
    ( 
        SELECT 
            count(*) 
        FROM 
            ( 
                SELECT 
                    * 
                FROM 
                    test 
            )AS t1 
        WHERE 
            t1.slope < t.slope 
    )* 100 /( 
        SELECT 
            count(*) 
        FROM 
            ( 
                SELECT 
                    * 
                FROM 
                    test 
            ) AS tz 
    ) 
)  AS slope_Percentile
 FROM test AS t 
--INNER JOIN test AS q ON
--q.ptime = t.ptime 

【讨论】:

    【解决方案2】:

    这个怎么样?

    SELECT *, (
        (SELECT count(*)
        FROM test AS t1
        WHERE t1.slope < t.slope) * 100 /
        (SELECT count(*)
        FROM test as tz)) as newvalue
    FROM test AS t;
    

    【讨论】:

    • 不——给我一个错误; [SQL] SELECT , ( (SELECT count() FROM test AS t1 WHERE t1.slope
    • 忘记了表的 MYSQL 需求别名
    • 缺少括号,就在 FROM 之前,添加它即可。
    • 感谢您的收获。固定。
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多