Ik neem aan (en hoop) dat je de gebruikersnaam niet twee keer opslaat, aangezien dat leidt tot problemen met de gegevenskwaliteit wanneer de gebruiker zijn naam verandert.
Ervan uitgaande dat de tabellen als volgt zijn gestructureerd:
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);
U kunt een GROUP BY
. gebruiken en HAVING
clausule die u de UserID
. geeft van alle gebruikers met meer dan 1 (of welk aantal u ook kiest) bestellingen. Dan voeg je dat toe aan de Members
tabel om de naam te krijgen.
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
Als je de namen echter al hebt opgeslagen (en dat verandert niet), dan kun je de JOIN
overslaan zoals hieronder:
SELECT
UserID,
Name
FROM
Orders
GROUP BY
UserID,
Name
HAVING
COUNT(OrderID) > 1