2015-01-14 2 views
-2

Я хотел бы создать представление нескольких таблиц, но не присоединяется:создать представление с несколькими таблицами с NO не присоединяется

SELECT * 
Table1, Table2, Table 3 

Но сервер меняется это:

Select * 
Table1 CROSSJOIN Table2 CROSSJOIN Table3 

Это невозможно?

У меня есть 4 стола ... Продукты, формы, спецификации и четвертый, где первичные ключи других трех составляют Product_Form_Specification. Я хотел бы показать все спецификации, которые не найдены в Product_Form_Specifications, но мне нужно иметь возможность добавлять, где параметры ограничивают форму и продукт. Я также должен иметь возможность выбирать FormNumber и ProductID. У меня есть ...

SELECT DISTINCT TOP 1000 
     s.Commerce_SpecificationID 
     ,s.Commerce_Spec_Name 
     ,p.ProductID 
     ,f.FormNumber 
    FROM Commerce.dbo.Commerce_Specifications s 
     , Commerce.dbo.Products p 
     , Commerce.dbo.Commerce_Forms f 
    WHERE s.Commerce_SpecificationID NOT IN 
        (SELECT s2.Commerce_SpecificationID 
        FROM Commerce.dbo.Commerce_Specifications s2 
        INNER JOIN [Commerce].[dbo].[Commerce_Product_Form_Specification] pfs on pfs.SpecificationID = s2.Commerce_SpecificationID 
        INNER JOIN Commerce.dbo.Products p2 on pfs.ProductID = p2.ProductID 
        INNER JOIN Commerce.dbo.Commerce_Forms f2 on pfs.FormNumber = f2.FormNumber 
        WHERE p2.ProductID = p.ProductID 
          AND f2.FormNumber = f.FormNumber) 

Это прекрасно работает как запрос, но сервер меняет его, когда я сохраняю его как представление.

EDIT: Я не знаю, что я делал неправильно раньше, но это работает нормально. Спасибо, что помогли. Я узнал о "," будучи кросс-соединениями.

+0

Какое отношение имеют эти таблицы? Кроме того, какая структура имеет эти таблицы, и каков ваш желаемый результат? Если ваши структуры таблиц одинаковы или похожи, вы можете использовать UNION. В противном случае вы должны использовать объединения. – gmiley

+0

Собственно, 'table1, table2' является' CROSS JOIN'. – dario

+0

Что вы пытаетесь достичь? Из того, что я вижу, JOIN - правильный инструмент для работы здесь. – Brian

ответ

0

, - это более старый способ присоединения ... это объединение без ввода «join».

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

select column1, column2, columnFromTable1Only 
from table1 
union all select column1, column2, null as columnFromTable1Only 
from table2 

в приведенном выше примере, table1 и table2 имеют, как и column1column2 колонн, однако только table1 имеет columnFromTable1Only. В этом случае объединения table2 должен иметь что-то в этой позиции столбцов, поэтому используется null.

+0

Какая версия стандарта устарела, 'для перекрестных соединений? –

+0

@ShannonSeverance/shrug Я только передавал то, что слышал, так что, если это дезинформация. Однако с помощью быстрого google: http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx – Kritner

+0

Я согласен с тем, что избегать SQL- 89, и использование соединений типа SQL-92 - это хорошо. Вы не получите никаких аргументов. Вот старое сообщение о том, что устарело, а что нет, по отношению к старому стилю присоединяется: http://blogs.technet.com/b/wardpond/archive/2008/09/13/deprecation-of-old-style -join-синтаксис только-а-частичная thing.aspx –

Смежные вопросы