【问题标题】:Unique album name for his author他的作者的唯一专辑名称
【发布时间】:2014-06-04 17:53:58
【问题描述】:

我正在尝试制作两张表:一张用于author,一张用于他们的音乐专辑。

作者不能拥有多个同名专辑。它应该每个author ID / name / 不管工作一次。

这是不允许的:

Author | Album name
-------------------
Johny  | FireGrasp
Johny  | FireGrasp

这应该是允许的:

Author | Album name
-------------------
Johny  | FireGrasp
Mandy  | FireGrasp

要不要办理手续?

我将尝试通过代码应该如何工作来解释它:

insert into Author(Val) VALUES ('John'), ('Mandy');

-- Author_id: 3=John, 4=Marx
insert into Album(Val, Author_id) VALUES ('Firegrasp', 3);
insert into Album(Val, Author_id) VALUES ('Firegrasp', 3); -- This should not work now
insert into Album(Val, Author_id) VALUES ('Firegrasp', 4); -- This should work

【问题讨论】:

  • 如果您在作者和专辑名称列上创建唯一索引,如果该作者和专辑名称已经存在,SQL 将阻止插入行。

标签: tsql duplicates unique uniq


【解决方案1】:

不确定是否要创建表 (OR) 以查找查询以获取发布的输出。

如果您正在寻找创建表,那么您可以将Author,Album name 设为primary key (composite PK),这将确保Author + Album name 的组合始终是唯一的。 primary key(Author, [Album name])

如果您的表中已经定义了PK,您甚至可以创建一个多列唯一约束,例如unique(Author, [Album name])

(或)

如果您正在寻找获得所需结果的查询,那么我认为您可以简单地使用 distinct 关键字,它只会获得这两条记录中的一条。

考虑到,您的Album 表只有这两列(Val, Author_id);创建一个主键,如

create table Album
(Val varchar(20),Author_id int,
CONSTRAINT PK_composite_123 PRIMARY KEY CLUSTERED (Val, Author_id))

【讨论】:

  • 我已经编辑了我的第一篇文章,请看代码 :) 这是关于列中值的唯一组合
  • @BartłomiejSobieszek,我的回答完全解决了您的问题。为 Val, Author_id 列创建 PK(或)为这些列创建唯一约束。
猜你喜欢
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多