【问题标题】:Sybase - join doesn't work properlySybase - 连接无法正常工作
【发布时间】:2016-12-08 13:24:17
【问题描述】:

我有一个问题。我在我的学校使用sybase,当我制作我的项目时,我发现了一些问题。我了解到没有on 子句的join 应该像cross join(笛卡尔积)一样工作。但是当我在两个表之间做join 时,例如AB

Select * from A join B 

A join B on A.Key=B.key 完全相同。我必须使用交叉连接才能得到笛卡尔。

我还有另一个问题:我应该能够在没有任何关系的情况下使用 join 表并获得它们的笛卡尔积,但我看到“没有办法将 joinXY”。

【问题讨论】:

  • 欢迎来到SO,请花点时间阅读How do I ask a good question
  • Select * from A join B 是无效的 SQL,根本不会运行。
  • 你能告诉我为什么吗?它只是在其他系统上工作。

标签: sql join sybase


【解决方案1】:

显然,在您使用的 Sybase 系统上,没有 onjoin 表示“自然连接”:这意味着基于同名列的连接(或者,可能遵循外键声明)。

我了解到不带 on 子句的连接应该像交叉连接一样工作

在早期,SQL 没有 join 关键字。您的查询将表示为Select * from A, B。这产生了笛卡尔积。从关系的角度来看,该产品使用关系 select(限制)运算符进行筛选,使用 where

【讨论】:

  • 好的,这就是我注意到的。当我使用查询时,您描述了Select * from A,B,我有笛卡尔积,但是当我使用不带 on 子句的连接时,我得到的结果与带有 on 子句的结果相同,但是当我有多个匹配的列时,我看到警告“有不止一种方法可以加入”我猜 Sybase 很聪明,因为我在其他系统上检查了这个问题,而没有 on 子句的加入给了我笛卡尔。感谢您的帮助,我将编写我的 sql 代码,就像它应该在需要的每个子句中完成一样,我认为让系统为您完成它是个坏主意,它可能会产生误导。
猜你喜欢
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2019-10-18
  • 1970-01-01
相关资源
最近更新 更多