我有这个复杂的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
但所有数据都没有订购。
为什么?
答案 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;";