Попытка вернуть 1 строку для поиска по нескольким значениям в дочерней таблице в представлении - PullRequest
0 голосов
/ 12 декабря 2011

В Таблице 1 используется соединение Таблицы 2 для связи многих со многими с Таблицей 3.

Table1

ID

Table2

Table1ID Table3ID

Таблица3

ID SomeData

Я хочу запрос, который будет возвращать только 1 экземпляр строки из таблицы Table1 для поиска нескольких таблиц. ID

Table1: ID

1

2

3

4

Таблица 2

1 1

1 2

2 2

2 3

Таблица3

1 "foo"

2 "бар"

3 "свиста"

4 "Взрыв"

Теперь я могу сделать соединение с подзапросом

SELECT * FROM Table1
 WHERE ID in (

SELECT DISTINCT(T1.ID)
FROM Table1 T1 LEFT OUTER JOIN Table2
ON T1.ID = T2.Table1ID
WHERE T2.Table3ID in (1,2)

)

где 1 и 2 - значения, которые я ищу.

Теперь я хочу обернуть это в представление, чтобы я мог запросить что-то вроде:

Select ID, {other stuff from T1} from vwGetData

где Значение в (1,2)

Возможно ли это? надеюсь, я достаточно ясно дал понять

ТИА!

1 Ответ

1 голос
/ 12 декабря 2011

Если вам нужны некоторые значения из Таблицы1, ваш запрос должен выглядеть следующим образом:

select T1.*
from Table1 as T1
where T1.ID in (select T2.Table1ID      
                from Table2 as T2
                where T2.Table2ID in (1, 2))

Нет способа создать представление и позволить добавить фильтр в (1, 2)в качестве предложения where для запроса представления.

Ваш пример запроса к представлению извлекает только столбец ID, поэтому для получения этой информации вам не нужно включать Table1 в запрос.

select distinct T2.Table1ID as ID
from Table2 as T2
where T2.Table2ID in (1, 2)

Вы можете создать это представление (без части distinct), но это не имеет особого смысла, не так ли?

create view v_Table2
as
select Table1ID, Table2ID
from Table2

Использовано так:

select distinct T2.Table1ID as ID
from v_Table2 as T2
where T2.Table2ID in (1, 2)

Представление не добавляет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...