【问题标题】:create a view with multiple tables with NO joins创建一个包含多个表且没有连接的视图
【发布时间】: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, table2CROSS JOIN
  • 你想完成什么?据我所知,JOIN 是适合这里工作的工具。
  • 我已经编辑了我的原始帖子以扩展我正在尝试做的事情。
  • 天啊。我一定是睡眠不足。这很好用。我不知道我之前做错了什么。

标签: sql-server view


【解决方案1】:

, 是一种较旧的加入方法...它是一种无需输入“加入”的加入。

从技术上讲,您仍然可以这样做,但如果所有表都具有相同的架构,则最简单。

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

在上面的示例中,table1table2 具有类似的 column1column2 列,但只有 table1 具有 columnFromTable1Only。在这个联合实例中,table2 需要在该列位置有 something,因此使用了 null

【讨论】:

猜你喜欢
  • 2021-06-21
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多