Как объединить эти две таблицы базы данных в один набор результатов? - PullRequest
1 голос
/ 25 мая 2009

У меня есть две таблицы в системе. Я пытаюсь сделать ВИД, который представляет их обоих вместе, и я не уверен, как это можно сделать или даже если это можно сделать.

Животные

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 Data

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. Фокс

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

... и возвращает 4. TapTap

ура :) 1030 *

PS. Я не уверен, что сформулировал название этого поста, поэтому, пожалуйста, не стесняйтесь редактировать его соответствующим образом (или предложите лучший заголовок, чтобы я мог его обновить).

Обновление: это для sql2008, но я предполагаю, что результатом будет tsql .. поэтому он должен / мог бы применяться по всем направлениям.

Ответы [ 2 ]

4 голосов
/ 25 мая 2009

Не для того, чтобы украсть гром, но меня укусило то, что я раньше не использовал 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 «имя» является ключевым словом, поэтому я использовал экранирующую скобку)

4 голосов
/ 25 мая 2009

Создание представления, которое создает СОЮЗ из двух таблиц:

CREATE VIEW PetsView AS
SELECT * FROM Pets
UNION
SELECT * FROM PetOtherNames
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...