SQL - 更新具有特定条件的所有行

时间:2018-04-27 14:32:45

标签: sql postgresql

我想做的是一个查询,它执行以下操作:

如果我执行查询,所有行都将设置为0,除了where中的某个id(它应该始终为1,此时只能有一行活动)

tbl_menu
id |串行
首发| VARCHAR
板| VARCHAR
饮料| VARCHAR
状态| smallint

因此,如果我有一个状态为1的注册表和0中的所有其他注册表,当我执行此查询时,我选择的某个ID将更改为1而其他ID将更改为0 也只有一行状态= 1

4 个答案:

答案 0 :(得分:0)

这是一个基本的更新声明。但是,如果您可以提供有关列名称的更多信息以及您希望进行更新的条件,那将会很有帮助。

FileName = Split(CurrentDb.TableDefs("LinkedExcelRange").Connect, "=")(1)
' FileName -> d:\path\yourexcelfile.xlsx

答案 1 :(得分:0)

这不能解决 update 的问题,但它确实解决了(最多)一行处于活动状态的强制执行问题。使用部分唯一索引:

create unique index unq_menu_active on tblmenu(flag) where flag = 1;

答案 2 :(得分:0)

试试这个:

template<std::size_t index, typename T>
struct tuple_element {
    using type = decltype(std::get<index>(std::declval<T>()));
};

答案 3 :(得分:0)

我认为您对设计有两种选择。 1)用两个简单的查询做到这一点。 2)用case语句写一个更复杂的查询。

我个人喜欢简单:

UPDATE tblmenu SET status = 0 WHERE status = 1;
UPDATE tblmenu SET status = 1 WHERE id = n;

尽管如此,我认为这是一个更好的方法......

  • 删除您的状态列
  • 创建一个名为tblstatus的新表,其中包含一列id
  • 一条记录为id的记录
  • 主表的外键

现在你所要做的就是:

UPDATE tblstatus SET id = n;

更快,更轻松,更强大......