代码之家  ›  专栏  ›  技术社区  ›  LAZ

ORDER BY id DESC LIMIT 100返回第一行而不是最后一行

  •  -1
  • LAZ  · 技术社区  · 1 年前


    试图找出原因 ORDER BY col DESC LIMIT 100

    CREATE TABLE transactions (
        id BIGSERIAL NOT NULL,
        timestamp timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
        user_id INT NOT NULL,
        to_id INT NOT NULL,
        amount NUMERIC(10, 2) DEFAULT 0 NOT NULL,
        comment VARCHAR(100) DEFAULT '' NOT NULL,
        rate INT DEFAULT 0 NOT NULL,
        PRIMARY KEY (id)
    );
    
    CREATE INDEX index_transactions_id ON transactions(id);
    CREATE INDEX index_transactions_user_id ON transactions(user_id);
    CREATE INDEX index_transactions_timestamp ON transactions(timestamp);
    

    问题是:

    SELECT * FROM transactions ORDER BY $1 DESC LIMIT 100;
    

    哪里 $1 id 并通过参数传递。
    NULLS FIRST/LAST 结果是一样的。

    发生了什么?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Erwin Brandstetter    1 年前

    哪里 $1 id 并通过参数传递。

    ORDER BY

    如果将“id”传递给这个准备好的查询,则会发生以下情况:

    SELECT * FROM transactions ORDER BY 'id'::text DESC LIMIT 100;
    

    ORDER BY <constant value> 只是噪声,对结果没有影响。

    动态结构化查询语言 ,即首先连接查询字符串,然后执行它。