sql >> Base de Datos >  >> RDS >> Mysql

MySQL:seleccione una fila si aparece más de x veces en otra tabla

Supongo (y espero) que no almacene el nombre del usuario dos veces, ya que eso genera problemas de calidad de los datos cuando el usuario cambia su nombre.

Asumiendo que las tablas están estructuradas como se muestra a continuación:

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

Puedes usar un GROUP BY y HAVING cláusula que le daría el UserID de todos los usuarios con más de 1 (o el número que elija) pedidos. Luego, lo unes a los Members tabla para obtener el nombre.

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

Sin embargo, si ya tiene los nombres almacenados (y eso no cambia), puede omitir JOIN como a continuación:

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