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 に答える