Je suppose (et j'espère) que vous ne stockez pas le nom de l'utilisateur deux fois, car cela entraîne des problèmes de qualité des données lorsque l'utilisateur change de nom.
En supposant que les tables sont structurées comme ci-dessous :
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);
Vous pouvez utiliser un GROUP BY
et HAVING
clause qui vous donnerait le UserID
de tous les utilisateurs avec plus de 1 (ou le nombre que vous choisissez) commandes. Ensuite, vous joignez cela aux Members
table pour obtenir le nom.
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
Cependant, si vous avez déjà les noms stockés (et que cela ne change pas), vous pouvez ignorer le JOIN
comme ci-dessous :
SELECT
UserID,
Name
FROM
Orders
GROUP BY
UserID,
Name
HAVING
COUNT(OrderID) > 1