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

时间:2015-11-17 16:52:08

标签: sql select join sybase sybase-ase15

我有以下疑问:

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 个答案:

答案 0 :(得分: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处理重复项。