2

我想知道如果没有使用连接,这个查询将如何编写。我一直试图找出连接不可行或无法使用(不可用)的情况。

SELECT
    *
FROM
(
    table1
INNER JOIN
    table2
ON
    table1.id = table2.id
)
INNER JOIN
    table3
ON
(
    table1.id2 = table3.id2
)
AND
(
    table1.id3 = table3.id3
)
WHERE
    table1.id = 1

我不能使用连接的原因是应用程序使用 HQL 而不是标准 SQL,并且 HQL 使得连接非常难以执行。

4

8 回答 8

12

如果不以一种或另一种方式连接它们,就不可能从两个不同的表中提取数据。您正在使用 JOIN 语句,但您可以通过将其放在 where 子句中来实现相同的目的,例如:

SELECT * FROM table1, table2 WHERE table1.id = table2.id AND ...
于 2009-04-15T16:55:07.560 回答
2

您可以在应用程序中进行选择并进行连接。

于 2009-04-15T16:55:23.643 回答
1

如果连接不受限制,请远离 SQL 数据库。

于 2009-04-15T18:00:55.937 回答
0

如果只选择 1 个值,通常子查询可能比连接更容易

SELECT e.Name, e.HireDate, (select SUM(CheckAmount) from EmployeeCheck where EmployeeID = e.ID) 
FROM Employee e
于 2009-04-15T17:01:50.930 回答
0

不是纯粹主义者,但关系数据库和数据规范化的核心概念是联接。如果没有这个,几乎没有理由使用关系数据库来存储数据。索引可以快速有效地实现这一点。

旧方法是使用主表和事务表。回到黑暗时代。

但是,您可以使用游标来执行连接将执行的过滤。游标的作用类似于针对表的数组,而不是执行基于连接的过滤器,并且会得到相同的结果。

于 2009-04-15T17:02:26.513 回答
0

如果需要,您可以使用相关子查询来执行此操作,但连接更好。

于 2009-04-15T17:03:04.217 回答
0

如果您的休眠映射文件中有关联映射,休眠不会阻止您进行连接。参见,例如:http ://www.jumpingbean.co.za/blogs/mark/hibernate_hql_inner_join_on_clause

于 2009-04-15T18:23:38.313 回答
-2

没有连接的 SQL...

SELECT * FROM table1
SELECT * FROM table2
SELECT * FROM table3

但这对你没有帮助。

问题是,你想要的输出是什么,你有什么理由不想加入?

如果您想要来自关系数据库中多个表的数据,那么您将加入数据。正如 James Black 建议的那样,也许这是您需要在应用程序中执行的操作。

如果您可以进一步了解情况,我们可能会提供进一步的帮助。

于 2009-04-15T17:00:13.133 回答