2015-06-22 4 views
-3

Я не мог найти ответ на свой конкретный вопрос в любом месте.Select Statement on Two different views

Можно ли выбрать два разных вида? Например, мой код выглядит примерно так.

select view1.col1, view1.col2, view1.col3 
from dbo.view1 
inner join ~~~~~ 
inner join ~~~~~ 

, но я хочу включить столбец из другого представления в том же запросе, как это.

select view1.co1, view1.col2, view1.col3, view2.col1 
from dbo.view1, 
    dbo.view2 (this is the line im not sure is possible or allowed) 
inner join ~~~~~~ 
inner join ~~~~~ 

Можно ли использовать разные представления в качестве источников для моего одного оператора select или это невозможно в SQL?

Я использую SQL-сервер в качестве механизма базы данных.

+1

Посмотреть или таблица не имеет значения, просто JOIN, как и раньше. – jarlh

+0

Избегайте синтаксиса типа 'from dbo.view1, dbo.view2'. Это ANSI-89 'JOIN' и должен быть заменен более подробным стилем ANSI-92' JOIN'. –

+0

Почему я получил -1 для этого вопроса? Просто чтобы я мог улучшить свои другие вопросы в будущем. – Jon

ответ

2

Да, вы можете использовать два разных вида в запросе SELECT. Вы должны ПРИСОЕДИНЯТЬСЯ к ним, если они совпадают друг с другом.

Просто используйте два разных вида, как две разные таблицы при использовании в разделе SELECT.

SELECT vw1.a, vw2.b 
FROM View1 vw1 INNER JOIN View2 vw2 
    ON vw1.id = vw2.id 

Для уточнения, представление можно рассматривать как виртуальную таблицу или сохраненный запрос. Пользователь может использовать эту виртуальную таблицу, ссылаясь на имя представления в операторах Transact-SQL так же, как и на таблицу.

EDIT

Select vw1.username, vw2.usertype 
From vw1 INNER JOIN vw2 
     ON vw1.colID = vw2.colID <<<< Here you have to use 
            <<<< common column between two views to matched rows 
+0

Так что, если столбец существует только в одном из представлений, и я хочу добавить его в полученный в результате запрос? Так вот так: 'select vw1.username, vw2.usertype от vw1.users ' 'Как включить vw2, чтобы я мог получить пользователь? – Jon

+0

, в этом случае вы используете соединение между vw1 и vw2 в общем столбце, а затем используйте vw2.usertype в select query. См. Редактировать – HaveNoDisplayName

+0

@Jon: - Какую базу данных вы используете? – HaveNoDisplayName

1

Когда дело доходит до SELECT, вид работает только обычной таблицы (базы). JOIN как и раньше:

select view1.co1, view1.col2, view1.col3, view2.col1 
from dbo.view1 
inner join dbo.view2 ON ~~~~~ 
inner join ~~~~~~ 
inner join ~~~~~ 
1

Вы должны использовать Регистрация

select view1.col1, view1.col2, view1.col3, view2.newColumn 
from dbo.view1 
inner join dbo.view2 on <key> = <key>; 

это exapmle только, чтобы очистить ваше понимание, как я вижу из вашего примера

from dbo.view1, 
    dbo.view2 (this is the line im not sure is possible or allowed) 
inner join ~~~~~ 

вы не можете понять, как это работает, мой exapmle над его этой Join и этой формой ниже со старой техникой, чего вам следует избегать

select view1.col1, view1.col2, view1.col3, view2.newColumn 
    from dbo.view1, dbo.view2 
    where view1.key = view2.key 

Спасибо и удачи

+0

Вам следует избегать ANSI-89 'JOIN's. Этот синтаксис устарел. http://stackoverflow.com/questions/1613304/ansi-joins-versus-where-clause-joins –

+0

Yeap Я знаю, почему я написал «Вы должны использовать Join» –

+0

Не устарел, но все еще плохая привычка его использовать. .. – jarlh