Mysql 避免子查询

Mysql 避免子查询,mysql,sql,Mysql,Sql,我编写了一个mysql查询,用subquery和join从两个表中检索数据。 查询工作正常,但由于某些性能问题,我希望避免使用子查询 它应该在分组之前按日期时间排序 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.valu

我编写了一个mysql查询,用subquery和join从两个表中检索数据。 查询工作正常,但由于某些性能问题,我希望避免使用子查询

它应该在分组之前按日期时间排序

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;
我尝试了几种不用子查询重写的方法,但仍然找不到解决方案。
在这种情况下可以避免子查询吗?

首先,子查询似乎没有任何用途。您所做的只是执行一个由执行的
订单,该订单将在您加入另一个表时丢失。您应该能够做到这一点:

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;

首先,您的子查询似乎没有任何用途。您所做的只是执行一个由
执行的
订单,该订单将在您加入另一个表时丢失。您应该能够做到这一点:

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;
你可以试试这个

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;;
你可以试试这个

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;;

表上没有任何筛选器,因此可以直接加入表:

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;

注意:您必须选择按分组的列。

表上没有任何筛选器,因此您可以直接加入表:

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;

注意:您必须选择按日期分组的列。

为什么使用sub?因为我想在分组之前按日期时间对表进行排序。为什么使用sub?因为我想在分组之前按日期时间对表进行排序。谢谢。这遗漏了表格中的order by子句。谢谢。这遗漏了表格中的order by子句。谢谢。但是我错过了订单。谢谢。但却错过了订单。