1

我有一个查询,我正在针对选择测试“IN”。

我收到“操作数应包含 1 列”错误,我认为这是因为我在“输入”选择中选择了超过 1 列。我需要第二列作为我的选择器的一部分,因为我需要对照“有”语句检查它。

我怎样才能使这项工作达到我想要的效果?

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 适用于具有 GROUP BY 子句的查询。

于 2012-10-17T02:15:54.647 回答