Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Seleziona la riga se appare più di x volte in un'altra tabella

Presumo (e spero) che tu non memorizzi il nome dell'utente due volte, poiché ciò porta a problemi di qualità dei dati quando l'utente cambia il proprio nome.

Supponendo che le tabelle siano strutturate come di seguito:

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);

Puoi usare un GROUP BY e HAVING clausola che ti darebbe il UserID di tutti gli utenti con più di 1 (o qualsiasi numero tu scelga) ordini. Quindi, uniscilo ai Members tabella per ottenere il nome.

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

Tuttavia, se hai già i nomi memorizzati (e questo non sta cambiando), puoi saltare il JOIN come di seguito:

SELECT
  UserID,
  Name
FROM
  Orders
GROUP BY
  UserID,
  Name
HAVING
  COUNT(OrderID) > 1