避免子查询

时间:2013-08-05 06:36:28

标签: mysql sql

我编写了一个mysql查询来从两个带有子查询和连接的表中检索数据。 查询工作正常但我想避免子查询,因为一些性能问题。

应按组前的日期时间排序。

SELECT a.value1, a.value2, b.value1 FROM (SELECT * FROM A ORDER BY datetime DESC, id DESC) AS a
INNER JOIN B AS b ON b.a_id=a.id
WHERE a.value4="value"
GROUP BY b.value2, b.value3;

我尝试了几种方法在没有子查询的情况下重写它,但仍无法找到解决方案。 在这种情况下是否可以避免子查询?

3 个答案:

答案 0 :(得分:2)

首先,您的子查询似乎没有任何意义。您所做的只是执行ORDER BY,当您加入其他表时,该SELECT a.value1, a.value2, b.value1 FROM A as a INNER JOIN B AS b ON b.a_id=a.id WHERE a.value4="value" GROUP BY b.value2, b.value3; 将会丢失。你应该能够做到这一点:

{{1}}

答案 1 :(得分:2)

您在A表上没有任何过滤器,因此您可以直接加入表:

SELECT b.value2, b.value3 FROM A AS a
INNER JOIN B AS b ON b.a_id=a.id
WHERE a.value4='value'
GROUP BY b.value2, b.value3;

请注意,您必须选择按照分组的列。

答案 2 :(得分:1)

你可以试试这个

SELECT a.value1, a.value2, b.value1 FROM A AS a INNER JOIN B AS b ON b.a_id=a.id WHERE a.value4="value" GROUP BY b.value2, b.value3 ORDER BY a.datetime DESC, a.id DESC;;