如何将这两个数据库表合并为一个结果集?

时间:2009-05-25 06:43:39

标签: sql view

我在系统中有两个表。我正在尝试制作一个代表他们的VIEW,我不知道如何做到这一点,或者甚至可以做到这一点。

宠物

PetId INT PK
Name  VARCHAR(100)

PetOtherNames

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 ..所以它应该/可以适用于整个主板。

2 个答案:

答案 0 :(得分:4)

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

CREATE VIEW PetsView AS
SELECT * FROM Pets
UNION
SELECT * FROM PetOtherNames

答案 1 :(得分: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”是一个关键字,所以我使用了转义括号)