首页 文章

连接查询返回的行多于嵌套的选择查询?

提问于
浏览
0

我有以下问题:

SELECT count(*)
FROM User u
INNER JOIN NAME n 
     ON u.UserId = n.UserId
    AND n.last = 'Joe';
--returns 1943

SELECT count(*)
FROM User u
WHERE u.UserId IN (
        SELECT n.UserId
        FROM NAME n
        WHERE n.last = 'Joe'
        );
--returns 1875

UserId是表User中的主键,表Name中的外键(不唯一) .

为什么连接查询返回的行多于嵌套的选择查询?它们不应该是一样的吗?

谢谢 .

1 回答

  • 1

    此查询的等效连接:

    SELECT count(*)
    FROM User u
    WHERE u.UserId IN (
            SELECT n.UserId
            FROM NAME n
            WHERE n.last = 'Joe'
           );
    

    将会:

    SELECT count(distinct u.UserId)
    FROM User u JOIN
         NAME n
         ON n.last = 'Joe' AND u.UserId = n.UserId;
    

    distinct 处理重复项 .

相关问题