0

我编写了一个 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;

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

4

3 回答 3

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;
于 2013-08-05T06:40:57.247 回答
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;

请注意,您必须选择分组依据的列。

于 2013-08-05T06:41:44.570 回答
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;;
于 2013-08-05T06:41:04.450 回答