用逗号分隔表的查询是交叉连接查询吗?

Posted

技术标签:

【中文标题】用逗号分隔表的查询是交叉连接查询吗?【英文标题】:Is a query with table separated by comma a cross join query? 【发布时间】:2014-05-30 08:07:09 【问题描述】:

我知道一些 SQL,但我总是使用joinleftcross 等,但在查询中表用逗号分隔。对我来说,这看起来像是一个交叉连接。但是我不知道怎么测试(结果和我尝试的一样)。

SELECT A.id, B.id
FROM A,B
WHERE A.id_B = B.id

即使在伟大的问题(有很好的答案)"What is the difference between Left, Right, Outer and Inner Joins?" 我也没有找到答案。

【问题讨论】:

我现在正在使用mysql。但我认为这与问题的要点无关。 以逗号分隔的表是较旧的语法。例如,在 Oracle 9i 之前,执行连接的语法类似于上面的 SQL 语句。这是一个 INNER JOIN 示例 What is the difference between using a cross join and putting a comma between the two tables?的可能重复 【参考方案1】:

这是 1992 年以前的旧标准 SQL 连接语法,您不应在今天编写的任何内容中模仿或使用它

where 子句指定连接样式和列。您可以使用=*==* 在哪里进行连接,左或右连接。 WHERE 中没有连接,使其成为交叉连接。

【讨论】:

甚至没有交叉连接(没有where的查询)? (我不喜欢这种语法,但很高兴知道)【参考方案2】:

如果没有关联两个表的WHERE 子句,它 是交叉连接。在这种情况下,它在功能上等同于内部连接(通过id_relid 匹配记录)

这是一种较旧的连接表语法,在大多数系统中仍受支持,但在很大程度上首选 JOIN 语法。

【讨论】:

【参考方案3】:

只要您在 where 子句中提供了连接条件,此语法就会产生内部连接。例如:

Where tableA.value = TableB.Value

【讨论】:

【参考方案4】:

在我看来像INNER JOIN

即双方都必须存在才能得到结果。

例如:

SELECT 
  A.id, B.id
FROM A
  INNER JOIN B ON A A.id_rel = B.id

【讨论】:

以上是关于用逗号分隔表的查询是交叉连接查询吗?的主要内容,如果未能解决你的问题,请参考以下文章

详解SQL Server连接(内连接外连接交叉连接)

MSSQL查询回显列之间用逗号分隔开怎么操作?

在 Laravel 的列中使用连接和逗号分隔值执行查询

MSSQL 详解SQL Server连接(内连接外连接交叉连接)

MySQL 查询:连接表并将记录显示为单行中的逗号分隔字符串

mysql 字段内容是用逗号分隔的。怎么按序列查询内容