【问题标题】:Join query returns more rows than nested select query?联接查询返回的行数比嵌套选择查询多吗?
【发布时间】:2016-02-19 03:50:00
【问题描述】:

我有以下疑问:

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

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

谢谢。

【问题讨论】:

  • 您的 UserId 有多个名称
  • 试试:select count(*), u.UserId from User u join Name n on u.UserId = n.UserId and n.last = 'Joe' group by u.UserId having count(*) > 1; 看看谁被复制了
  • 我明白了。现在说得通了。谢谢!

标签: sql select join sybase sybase-ase15


【解决方案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 负责处理重复项。

【讨论】:

  • 现在明白了,一开始我无法理解它。谢谢。
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多