订购复杂的MySql查询

时间:2015-10-28 14:03:04

标签: mysql

我有这个复杂的Sql查询,我无法按照自己的意愿订购。

查询

$query = "SELECT *
            FROM element_skanning yt1 JOIN
                 (SELECT objekt_nr, element_nr
                  FROM element_skanning
                  WHERE vart IN ('B.Avf', 'R.Avf')
                  GROUP BY objekt_nr, element_nr
                  HAVING count(*) > 1
                 ) yt2
                  ON yt2.objekt_nr = yt1.objekt_nr AND
                     yt2.element_nr = yt1.element_nr 
            WHERE vart IN ('B.Avf', 'R.Avf')
            ORDER BY 2;";

我希望订购:element_nr ASC

我尝试了不同的东西,如:

WHERE vart IN ('B.Avf', 'R.Avf')
GROUP BY objekt_nr, element_nr
HAVING count(*) > 1
ORDER BY element_nr ASC

或:

WHERE vart IN ('B.Avf', 'R.Avf')
GROUP BY objekt_nr, element_nr
ORDER BY 2 ASC
HAVING count(*) > 1

主要查询ORDER BY 2结尾。这是element_nr
但所有数据都没有订购。

为什么?

1 个答案:

答案 0 :(得分:1)

始终建议在order by子句中使用列名(而不是位置值)以避免因重新排列列而导致的任何问题(由于新添加或删除列),请尝试如下.. < / p>

$query = "SELECT *
        FROM element_skanning yt1 JOIN
             (SELECT objekt_nr, element_nr
              FROM element_skanning
              WHERE vart IN ('B.Avf', 'R.Avf')
              GROUP BY objekt_nr, element_nr
              HAVING count(*) > 1
             ) yt2
              ON yt2.objekt_nr = yt1.objekt_nr AND
                 yt2.element_nr = yt1.element_nr 
        WHERE vart IN ('B.Avf', 'R.Avf')
        ORDER BY yt2.element_nr;";