相关疑难解决方法(0)

混合隐式和显式JOIN

我遇到Hibernate生成无效SQL的问题.具体来说,混合和匹配隐式和显式连接.这似乎是一个开放的bug.

但是,我不确定为什么这是无效的SQL.我想出了一个生成相同语法异常的小玩具示例.

架构

CREATE TABLE Employee (
    employeeID INT,
    name VARCHAR(255),
    managerEmployeeID INT   
)
Run Code Online (Sandbox Code Playgroud)

数据

INSERT INTO Employee (employeeID, name) VALUES (1, 'Gary')
INSERT INTO Employee (employeeID, name, managerEmployeeID) VALUES (2, 'Bob', 1)
Run Code Online (Sandbox Code Playgroud)

工作SQL

这两个查询都有效.我意识到有笛卡尔积; 那是故意的.

明确的加入:

SELECT e1.name,
       e2.name,
       e1Manager.name
  FROM Employee e1
 CROSS JOIN Employee e2
 INNER JOIN Employee e1Manager
    ON e1.managerEmployeeID = e1Manager.employeeID
Run Code Online (Sandbox Code Playgroud)

隐含的JOIN:

SELECT e1.name,
       e2.name,
       e1Manager.name
  FROM Employee e1,
       Employee e2,
       Employee e1Manager
 WHERE e1.managerEmployeeID = e1Manager.employeeID
Run Code Online (Sandbox Code Playgroud)

无效的SQL

此查询不适用于MSSQL 2000/2008或MySQL:

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql hibernate join cartesian-product cross-join

8
推荐指数
1
解决办法
6125
查看次数

标签 统计

cartesian-product ×1

cross-join ×1

hibernate ×1

join ×1

sql ×1