我编写了一个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;
我尝试了几种方法在没有子查询的情况下重写它,但仍无法找到解决方案。 在这种情况下是否可以避免子查询?
答案 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;;