创建一个包含多个没有连接的表的视图

时间:2015-01-14 18:16:08

标签: sql-server view

我想创建一个多个表但没有连接的视图:

SELECT *
Table1, Table2, Table 3

但服务器正在将其更改为:

Select *
Table1 CROSSJOIN Table2 CROSSJOIN Table3

这不可能吗?

我有4个表...产品,表单,规格和第四个表,其他三个的主键组成Product_Form_Specification。我想展示Product_Form_Specifications中没有的所有规范,但我需要能够添加where参数来限制Form和Product。我还需要能够选择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)

这可以作为查询正常工作,但是当我将其保存为视图时服务器会更改它。

编辑:我不知道我之前做错了什么,但这很好。谢谢你的帮助。我确实学到了“,”正在交叉加入。

1 个答案:

答案 0 :(得分:0)

,是一种较旧的加入方式...它是一种无需键入的加入"加入"。

从技术上讲,你仍然可以做到这一点,但如果所有表都具有相同的架构,那么它是最简单的。

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

在上面的示例中,table1table2列有column1column2列,但只有table1columnFromTable1Only。在此联合实例中,table2需要在该列位置具有某些,因此使用null