我有以下疑问:
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中的外键(不是唯一的)。
为什么连接查询返回的行多于嵌套的选择查询?它们不应该是一样的吗?
感谢。
答案 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
处理重复项。