创建一个包含多个表且没有连接的视图
create a view with multiple tables with NO joins
我想创建一个包含多个表但没有连接的视图:
SELECT *
Table1, Table2, Table 3
但是服务器正在将其更改为:
Select *
Table1 CROSSJOIN Table2 CROSSJOIN Table3
这不可能吗?
我有 4 个表...产品、表格、规格和第四个,其他三个表的主键组成 Product_Form_Specification。我想显示 Product_Form_Specifications 中没有的所有规范,但我需要能够添加 where 参数来限制表单和产品。我还需要能够 select 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)
这作为查询工作正常,但当我将其保存为视图时服务器更改了它。
编辑:我不知道我之前做错了什么,但这工作正常。谢谢你的帮助。我确实了解了“,”是交叉连接。
,
是一种较旧的加入方法...它是一种无需输入 "join".
的加入方法
从技术上讲,您仍然可以这样做,但如果所有表都具有相同的架构,则最简单。
select column1, column2, columnFromTable1Only
from table1
union all select column1, column2, null as columnFromTable1Only
from table2
在上面的例子中,table1
和 table2
有类似 column1
和 column2
的列,但是只有 table1
有 columnFromTable1Only
。在这个联合实例中,table2
需要在该列位置有 something,因此使用 null
。
我想创建一个包含多个表但没有连接的视图:
SELECT *
Table1, Table2, Table 3
但是服务器正在将其更改为:
Select *
Table1 CROSSJOIN Table2 CROSSJOIN Table3
这不可能吗?
我有 4 个表...产品、表格、规格和第四个,其他三个表的主键组成 Product_Form_Specification。我想显示 Product_Form_Specifications 中没有的所有规范,但我需要能够添加 where 参数来限制表单和产品。我还需要能够 select 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)
这作为查询工作正常,但当我将其保存为视图时服务器更改了它。
编辑:我不知道我之前做错了什么,但这工作正常。谢谢你的帮助。我确实了解了“,”是交叉连接。
,
是一种较旧的加入方法...它是一种无需输入 "join".
从技术上讲,您仍然可以这样做,但如果所有表都具有相同的架构,则最简单。
select column1, column2, columnFromTable1Only
from table1
union all select column1, column2, null as columnFromTable1Only
from table2
在上面的例子中,table1
和 table2
有类似 column1
和 column2
的列,但是只有 table1
有 columnFromTable1Only
。在这个联合实例中,table2
需要在该列位置有 something,因此使用 null
。