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 中的外键(不唯一)。

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

谢谢。

4

1 回答 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负责处理重复项。

于 2015-11-17T17:03:41.510 回答