Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - Selecione a linha se aparecer mais de x vezes em outra tabela


Estou assumindo (e esperando) que você não esteja armazenando o nome do usuário duas vezes, pois isso leva a problemas de qualidade de dados quando o usuário altera o nome.

Assumindo que as tabelas estão estruturadas como abaixo:
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);

Você pode usar um GROUP BY e HAVING cláusula que lhe daria o UserID de todos os usuários com mais de 1 (ou o número que você escolher) pedidos. Então, você junta isso aos Members tabela para obter o 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

No entanto, se você já tiver os nomes armazenados (e isso não mudará), pule o JOIN como abaixo:
SELECT
  UserID,
  Name
FROM
  Orders
GROUP BY
  UserID,
  Name
HAVING
  COUNT(OrderID) > 1