【问题标题】:Prevent insert statement from reordering table in SQL防止插入语句在 SQL 中重新排序表
【发布时间】:2020-01-24 17:02:55
【问题描述】:

我正在创建一个外键表。该表将保存组名(作为其主键),在主表中作为 FK 引用。主表中的许多对象可能属于一个组。

有很多不同的组名,所以我想用一个 insert into 语句一次性添加它们。但是,我希望“无”成为表中的最高值,以便在主表中添加新条目时可以轻松单击它。

但是,当我在 FK 表中输入“None”,然后执行 insert into 语句时,该表会自动重新排序(按字母顺序),将“None”放在中间附近且不易点击。

如何防止表格自行重新排序?

编辑: 对不起,如果我不清楚。我正在使用 Navicat GUI 将数据添加到表中,因此在将数据添加到主表时,外键字段是一个下拉列表(有顶部和底部,并按字母顺序排列)。

另外,我发现当任何新值被添加到外键表中时,GUI 会按字母顺序对其进行重新排序(因为外键表中没有索引可以对其进行排序)。与insert into语句无关。

【问题讨论】:

  • 表格中没有top value这样的东西。
  • 根据定义,表是无序的。在从表中检索数据时,您可以使用 Order by 语句强制执行顺序。
  • 听起来像是一个关于如何设计列表框并以所需方式对条目进行排序的问题。
  • 在你的表中使用一个排序列 - 然后你可以按它排序。即确保“none”为 1,然后“something, 2, any 3, more codes, 4 etc
  • 显示用于加载表格的查询以及“表格中的最高值”的含义。这在关系数据库中没有任何意义。

标签: mysql sql sql-insert


【解决方案1】:

你可以做什么来返回你想要作为 top 的值是在你的 select 语句中使用条件排序:

select * 
from tablename
order by case when groupname = 'None' then 1 else 2 end 

对于 Mysql,这可以简化为:

order by groupname <> 'None'

或:

order by groupname = 'None' desc

这将首先返回带有“无”的行。
groupname 更改为列的实际名称。

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 2020-08-14
    • 2016-02-19
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多