创建新表并按字段名排序的查询不起作用

yzuktlbb  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(417)

我需要创建新表并从第二个表复制数据。在它之后按字段名排序,但这种重新排序不起作用。示例:我创建一个新表并从第二个表(pizzaname字段=a,b,c)复制数据,然后按case/when对表重新排序。这是我的密码:

CREATE TABLE secondTable (
  pizzaName       VARCHAR(20) NOT NULL,
  lowSize         TINYINT     NOT NULL,
  mediumSize      TINYINT     NOT NULL,
  largeSize       TINYINT     NOT NULL,
  PRIMARY KEY (pizzaName),
  UNIQUE INDEX pizzaName_UNIQUE (pizzaName ASC) VISIBLE
) AS SELECT * FROM firstTable ORDER BY
    CASE
     WHEN pizzaName = 'c' THEN 1
     WHEN pizzaName = 'a' THEN 2
     WHEN pizzaName = 'b' THEN 3
    END;
ppcbkaq5

ppcbkaq51#

你得把它一分为二。
sql标准没有指定数据在数据库中的存储顺序—这在逻辑上是不相关的(尽管在实践中,聚集索引确实会影响顺序)。除了创建聚集索引之外,没有其他方法可以指定数据的存储顺序,但这不是普遍支持的。
您可以指定查询时检索数据的顺序,这就是“orderby”子句的作用。
因此,步骤1是创建表的副本(不确定为什么要这样做,但假设需要这样做):

CREATE TABLE secondTable (
  pizzaName       VARCHAR(20) NOT NULL,
  lowSize         TINYINT     NOT NULL,
  mediumSize      TINYINT     NOT NULL,
  largeSize       TINYINT     NOT NULL,
  PRIMARY KEY (pizzaName),
  UNIQUE INDEX pizzaName_UNIQUE (pizzaName ASC) VISIBLE
) AS SELECT * FROM firstTable

步骤2:从副本检索数据:

SELECT * FROM secondTable ORDER BY
    CASE
     WHEN pizzaName = 'c' THEN 1
     WHEN pizzaName = 'a' THEN 2
     WHEN pizzaName = 'b' THEN 3

相关问题