为什么mySQL中的“ IN”不能正确过滤数据?

时间:2019-04-20 17:36:00

标签: mysql select

我正在使用以下查询来获取给定ListingID和UserID的RegionID。但是我的结果包括我没有想到但仍属于用户的ListingID。

SET @ListingID = 71;
SET @UserID = 160;

SELECT 
LIST_REGION_LISTING_ID,
LIST_REGION_REGION_ID,
REGION_NICK_NAME
FROM 
listing_region
INNER JOIN region ON REGION_ID = LIST_REGION_REGION_ID AND REGION_USER_ID = @UserID
WHERE LIST_REGION_REGION_ID IN (SELECT LIST_REGION_REGION_ID FROM listing_region WHERE LIST_REGION_LISTING_ID = @ListingID);

结果: enter image description here

为什么我得到在查询中未请求的ListingID 58?

1 个答案:

答案 0 :(得分:0)

您将获得LIST_REGION_LISTING_ID 58,因为在子查询中,您将获得所有具有LIST_REGION_LISTING_ID = 71的LIST_REGION_REGION_ID。在结果中,您可以看到tou获得LIST_REGION_REGION_ID 11和12号。

所以您的WHERE子句看起来像这样

WHERE LIST_REGION_REGION_ID IN (11,12) 

,其中包括LIST_REGION_LISTING_ID = 58的行

您可以在不使用子查询的情况下进行查询:

SET @ListingID = 71;
SET @UserID = 160;

SELECT 
    LIST_REGION_LISTING_ID,
    LIST_REGION_REGION_ID,
    REGION_NICK_NAME
FROM 
    listing_region
INNER JOIN region ON REGION_ID = LIST_REGION_REGION_ID AND REGION_USER_ID = @UserID
WHERE  listing_region.LIST_REGION_LISTING_ID = @ListingID;