Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Sélectionnez une ligne si elle apparaît plus de x fois dans une autre table

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