小编Ste*_*ven的帖子

对多个查询列使用相同的 CASE WHEN 条件

是否有“更好”的方法来重写SELECT多个列使用相同CASE WHEN条件的子句,以便条件只检查一次?

请参阅下面的示例。

SELECT
    CASE testStatus 
        WHEN 'A' THEN 'Authorized'
        WHEN 'C' THEN 'Completed'
        WHEN 'P' THEN 'In Progress'
        WHEN 'X' THEN 'Cancelled'
    END AS Status,

    CASE testStatus 
        WHEN 'A' THEN authTime
        WHEN 'C' THEN cmplTime
        WHEN 'P' THEN strtTime
        WHEN 'X' THEN cancTime
    END AS lastEventTime,

    CASE testStatus 
        WHEN 'A' THEN authBy
        WHEN 'C' THEN cmplBy
        WHEN 'P' THEN strtBy
        WHEN 'X' THEN cancBy
    END AS lastEventUser
FROM test
Run Code Online (Sandbox Code Playgroud)

在非 sql 伪代码中,代码可能如下所示:

CASE testStatus
    WHEN …
Run Code Online (Sandbox Code Playgroud)

oracle database-design best-practices oracle-10g

14
推荐指数
2
解决办法
10万
查看次数

强制执行“至少一个”关系

许多一对多(数据模型)维基百科的文章使用作者和图书的例子:

例如,将 A 视为作者,将 B 视为书籍。一个作者可以写几本书,一本书可以由几个作者写。

在关系数据库管理系统中,这种关系通常是通过关联表(也称为交叉引用表)来实现的,例如,AB 具有两个一对多关系 A -> AB 和 B -> AB。在这种情况下,AB 的逻辑主键由两个外键(即 A 和 B 的主键的副本)形成。

有了约束,你会如何执行一本书必须至少一个作者?

笔记:

  • 对于此示例,本书没有“主要”作者这样的东西。
  • 以 SQL(任何 RDBMS)或一般术语回答。

normalization database-design constraint

8
推荐指数
1
解决办法
4447
查看次数