【发布时间】:2015-01-14 18:16:07
【问题描述】:
我想创建一个包含多个表但没有连接的视图:
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)
这可以作为查询正常工作,但是当我将其保存为视图时服务器会更改它。
编辑:我不知道我之前做错了什么,但这很好用。谢谢你的帮助。我确实了解了“,”是交叉连接。
【问题讨论】:
-
这些表有什么样的关系?另外,这些表有什么样的结构,你想要的输出是什么?如果您的表结构相同或相似,则可以使用 UNION。否则,您必须使用连接。
-
其实
table1, table2是CROSS JOIN。 -
你想完成什么?据我所知,JOIN 是适合这里工作的工具。
-
我已经编辑了我的原始帖子以扩展我正在尝试做的事情。
-
天啊。我一定是睡眠不足。这很好用。我不知道我之前做错了什么。
标签: sql-server view