我想创建一个多个表但没有连接的视图:
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)
这可以作为查询正常工作,但是当我将其保存为视图时服务器会更改它。
编辑:我不知道我之前做错了什么,但这很好。谢谢你的帮助。我确实学到了“,”正在交叉加入。答案 0 :(得分:0)
,
是一种较旧的加入方式...它是一种无需键入的加入"加入"。
从技术上讲,你仍然可以做到这一点,但如果所有表都具有相同的架构,那么它是最简单的。
select column1, column2, columnFromTable1Only
from table1
union all select column1, column2, null as columnFromTable1Only
from table2
在上面的示例中,table1
和table2
列有column1
和column2
列,但只有table1
有columnFromTable1Only
。在此联合实例中,table2
需要在该列位置具有某些,因此使用null
。