mysql-查询以创建新表并按字段名称排序不起作用

时间:2018-07-26 12:24:55

标签: mysql

我需要创建新表并从第二个表复制数据。之后,按字段名称排序,但是此重新排序不起作用。示例:创建新表并从第二个表(pizzaName字段= a,b,c)复制数据,然后按大小写/时间对表重新排序。这是我的代码:

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;

1 个答案:

答案 0 :(得分:0)

您需要将其分为两部分。

SQL标准没有指定数据在数据库中的存储顺序-从逻辑上讲是无关紧要的(尽管实际上,聚集索引确实会影响顺序)。除了创建聚簇索引之外,没有其他方法可以指定存储数据的顺序,但这并不是普遍支持的。

可以做的是指定查询时检索数据的顺序-这就是“ order by”子句的作用。

因此,第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