如何在不使用连接的情况下重写查询

时间:2009-04-15 16:52:53

标签: sql inner-join

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

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使得连接难以实现。

8 个答案:

答案 0 :(得分:12)

如果不以某种方式加入数据,就无法从两个不同的表中提取数据。您正在使用JOIN语句但是您可以通过将其放在where子句中来实现相同的功能,例如:

SELECT * FROM table1, table2 WHERE table1.id = table2.id AND ...

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果只选择1个值

,通常子查询可能比连接更容易
SELECT e.Name, e.HireDate, (select SUM(CheckAmount) from EmployeeCheck where EmployeeID = e.ID) 
FROM Employee e

答案 4 :(得分:0)

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

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

但是,您可以使用游标来执行连接所做的过滤。光标就像对着表的数组而不是基于连接的过滤器,并且会得到相同的结果。

答案 5 :(得分:0)

如果需要,可以使用相关子查询来完成,但连接更好。

答案 6 :(得分:0)

如果在hibernate映射文件中有关联映射,Hibernate不会阻止您进行连接。例如,请参阅:http://www.jumpingbean.co.za/blogs/mark/hibernate_hql_inner_join_on_clause

答案 7 :(得分:-2)

没有连接的SQL ...

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

但这对你没有帮助。

问题是,您想要的输出是什么,以及您不希望加入的原因是什么?

如果您想要关系数据库中多个表的数据,那么您将加入数据。也许正如James Black所说,这是你需要在应用程序中做的事情。

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