0

2 つのテーブルを結合する以下のクエリがあります。最後にグループを削除するとクエリは機能しますが、返される行が多すぎます。

最優先事項は、order by距離 (クエリ内で計算されます) を取得することですtr_id。次に、距離が最小の一意のみが必要です。

使用するgroup byと、次のエラーが発生します。

1064 - SQL 構文にエラーがあります。2行目付近GROUP BY tr_id LIMIT 0, 30で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

SELECT op.operatorid AS tr_id, de.latitude AS
tolatitude, de.longitude AS tolongitude, de.surname AS tosurname,
de.firstname AS tofirstname, de.did AS to_id,
de.tzz AS tmzz, 
op.bkk AS tobkk, 
( 3959 * acos( cos( radians(52.524368165134284) ) * cos( radians(
de.latitude )
 ) * cos( radians( de.longitude) - radians(13.410530090332031) ) + sin(
radians(52.524368165134284) ) * sin( radians( de.latitude ) ) ) ) 
AS distance 
FROM de 
INNER JOIN op ON de.did = op.did 
WHERE de.type='Dutch' AND de.longitude > 11.6118868785
AND de.longitude < 15.2091733022 AND de.latitude > 50.7257249533
AND de.latitude < 54.323011377 having distance < 200 
GROUP BY tr_id
ORDER BY distance
4

2 に答える 2

4

HAVING 句は GROUP BY 句の後に来る必要があるため、クエリは次のようにする必要があります。

SELECT op.operatorid AS tr_id, de.latitude AS
tolatitude, de.longitude AS tolongitude, de.surname AS tosurname,
de.firstname AS tofirstname, de.did AS to_id,
de.tzz AS tmzz, 
op.bkk AS tobkk, 
( 3959 * acos( cos( radians(52.524368165134284) ) * cos( radians(
de.latitude )
) * cos( radians( de.longitude) - radians(13.410530090332031) ) + sin(
radians(52.524368165134284) ) * sin( radians( de.latitude ) ) ) ) 
AS distance 
FROM de 
INNER JOIN op ON de.did = op.did 
WHERE de.type='Dutch' AND de.longitude > 11.6118868785
AND de.longitude < 15.2091733022 AND de.latitude > 50.7257249533
AND de.latitude < 54.323011377  
GROUP BY tr_id having distance < 200
ORDER BY distance
于 2012-05-06T11:22:39.323 に答える
4

ORDER BYの後に指定する必要があります GROUP BY

PS: で集計関数の使用法が見られないSELECTため、クエリ全体が少し混乱しているように見えます

于 2012-05-06T11:00:19.280 に答える