1

我在系统中有两个表。我正在尝试制作一个同时代表它们的视图,我不确定如何做到这一点,甚至不确定是否可以做到。

宠物

PetId INT PK
Name  VARCHAR(100)

宠物其他名字

PetID INT PK FK
Name VARCHAR(100) PK

所以,我有一张宠物桌。名称(在此表中)是它们的正式通用名称。每只宠物可能有零对多的其他名称。这些名称永远不会显示,但要在搜索查询中使用。

那么,让我们看一些数据。

宠物资料

1. Fred
2. Barney
3. Foo
4. Megan Fox (boom tish)

PetsOtherName 数据

2. B-b-b-Barney
2. Bannana Barney
2. Banannarama
4. TapTap

所以......如果我查看这两个表,我希望得到以下结果......

SELECT *
FROM PetsView
ORDER BY PetId, Name

1. Fred
2. B-b-b-Barney
2. Barney
2. Bannana Barney
2. Banannarama
3. Foo
4. Megan Fox
4. TapTap

这将使我能够执行以下操作....

SELECT PetId, Name
FROM PetsView
WHERE CONTAINS(Name, 'Fox')

...并返回 4. Fox

SELECT PetId, Name
FROM PetsView
WHERE CONTAINS(Name, 'Fox')

...然后返回 4。 TapTap

干杯:)

PS。我不确定我写了这篇文章的标题,所以请随时适当地编辑它(或建议一个更好的标题,让我更新)。

更新:这是针对 sql2008 的,但我假设结果是 tsql .. 所以它应该/可以全面应用。

4

2 回答 2

4

创建一个创建两个表的 UNION 的视图:

CREATE VIEW PetsView AS
SELECT * FROM Pets
UNION
SELECT * FROM PetOtherNames
于 2009-05-25T06:46:04.720 回答
4

不要偷任何雷声,但我之前没有使用 UNION ALL 被咬过。

基本上,如果您在任一表中都有完全相同的 petId-Name 组合,那么如果您只使用 UNION,则结果集中只会出现一条记录。通过使用 UNION ALL,您将看到重复项(您可能想要也可能不想要)。

CREATE VIEW PetsView AS
SELECT petId, [Name] FROM Pets
UNION ALL
SELECT petId, [Name] FROM PetOtherNames

(在 SQL Server 中,“name”是关键字,所以我使用了转义括号)

于 2009-05-25T06:49:21.173 回答