1

選択に対して「IN」をテストしているクエリがあります。

「IN」選択で複数の列を選択しているため、「オペランドに1列が含まれている必要があります」というエラーが発生します。'having'ステートメントに対してチェックする必要があるため、セレクターの一部として2番目の列が必要です。

どうすればこれを機能させて希望の効果を得ることができますか?

SELECT DISTINCT c.ID, Title, URLSegment
FROM ListingCategory c
LEFT JOIN SiteTree_Live ON c.ID = SiteTree_Live.ID
JOIN ListingCategory_Listings lc
      ON c.ID = lc.ListingCategoryID
        WHERE lc.ListingID IN (
            SELECT Listing.ID,
( 6371 * ACOS( COS( RADIANS(-45.0227996) ) * COS( RADIANS( Location.Latitude ) ) * COS( RADIANS( Location.Longitude ) - RADIANS(168.6991149) ) + SIN( RADIANS(-45.0227996) ) * SIN( RADIANS( Location.Latitude ) ) ) ) AS distance
FROM Listing
LEFT JOIN Location ON Listing.LocationID = Location.ID
having distance < 5
        );
4

2 に答える 2

1

簡単-計算列を選択しないでください。また、そうではありWHEREませんHAVING

...
WHERE lc.ListingID IN (
    SELECT Listing.ID
    FROM Listing
    LEFT JOIN Location ON Listing.LocationID = Location.ID
    WHERE 6371 * ACOS( COS( RADIANS(-45.0227996) ) * COS( RADIANS( Location.Latitude ) ) * COS( RADIANS( Location.Longitude ) - RADIANS(168.6991149) ) + SIN( RADIANS(-45.0227996) ) * SIN( RADIANS( Location.Latitude ) ) )
        < 5
);
于 2012-10-17T02:21:52.253 に答える
0

あなたがしたいことはできません。INサブクエリは単一の列を返す必要があります。

私の提案は、結合チェーンにテーブルLINSTINGを追加してから、を要求することListing.ID is not nullです。

また、HAVINGは、GROUPBY句を持つクエリ用です。

于 2012-10-17T02:15:54.647 に答える