加入查询 returns 比嵌套 select 查询多行?
Join query returns more rows than nested select query?
我有以下疑问:
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 是 table User 中的主键,也是 table Name 中的外键(不唯一)。
为什么连接查询 returns 行比嵌套 select 查询多?他们不应该是一样的吗?
谢谢。
此查询的等效联接:
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
负责处理重复项。
我有以下疑问:
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 是 table User 中的主键,也是 table Name 中的外键(不唯一)。
为什么连接查询 returns 行比嵌套 select 查询多?他们不应该是一样的吗?
谢谢。
此查询的等效联接:
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
负责处理重复项。