SQL Server 2012:如何使用where子句防止记录重复

时间:2016-04-25 23:35:17

标签: sql-server duplicates

我有一个包含三个表的数据库; items,item_unit和units。物品属于7个单位之一。创建这些表是:

CREATE TABLE items
( 
itemID  int PRIMARY KEY,
itemDefinition varchar (150)
)

CREATE TABLE units
(
unitID int PRIMARY KEY,
unitName varchar(25)
)

CREATE item_Units
(
 itemID int FOREIGN KEY REFERENCES items(itemID),
 unitID int FOREIGN KEY REFERENCES units(unitID),
 PRIMARY KEY(itemID, unitID)
)

场景是,属于同一单元的项目不能具有相同的定义。我知道可以在表上创建索引和约束来限制重复,但是可以这样做,因为它与这种情况有关吗?

1 个答案:

答案 0 :(得分:0)

根据您的方案,架构应如下所示:

CREATE TABLE items
( 
itemID  int PRIMARY KEY,
itemDefinition varchar (150) not null
)

CREATE TABLE units
(
unitID int PRIMARY KEY,
unitName varchar(25) not null
)

CREATE TABLE item_Units
(
 itemID int FOREIGN KEY REFERENCES items(itemID),
 unitID int FOREIGN KEY REFERENCES units(unitID),
 itemUnitDescription varchar(200) null,
 PRIMARY KEY(itemID, unitID)
)
create view items_with_units
as
select i.itemId,u.unitID,
isnull(ui.itemUnitDescription,isnull(i.itemDescription,'')+ ' '+isnull(u.unitName,'')) Description
from items i
left join item_units ui on i.itemID=ui.itemID
left join units u on u.unitID=ui.unitID

这样select * from item_with_units会为您提供所需内容。