ユーザーが名前を変更するとデータ品質の問題が発生するため、ユーザーの名前を2回保存しないことを前提としています(そして期待しています)。
テーブルが次のように構成されていると仮定します。
CREATE TABLE
Members
(
UserID INT,
Name VARCHAR(15)
);
INSERT INTO
Members
VALUES
(111, 'Peter'),
(222, 'Bart'),
(333, 'Joe'),
(444, 'Andrew');
CREATE TABLE
Orders
(
OrderID INT,
UserID INT
);
INSERT INTO
Orders
VALUES
(777, 111),
(888, 333),
(999, 111),
(101, 444),
(102, 111),
(103, 333);
GROUP BY
を使用できます およびHAVING
UserID
を提供する句 1つ以上(または選択した数)の注文を持つすべてのユーザーの。次に、それをMembers
に参加させます 名前を取得するためのテーブル。
SELECT
Orders.UserID,
Members.Name
FROM
Orders
INNER JOIN
Members
ON Orders.UserID = Members.UserID
GROUP BY
UserID,
Members.Name
HAVING
COUNT(OrderID) > 1;
SQLFiddle: http://sqlfiddle.com/#!9/1dadc4/2
ただし、名前がすでに保存されている(そしてそれが変更されていない)場合は、JOIN
をスキップできます。 以下のように:
SELECT
UserID,
Name
FROM
Orders
GROUP BY
UserID,
Name
HAVING
COUNT(OrderID) > 1