Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Zeile auswählen, wenn sie mehr als x-mal in einer anderen Tabelle vorkommt

Ich gehe davon aus (und hoffe), dass Sie den Benutzernamen nicht zweimal speichern, da dies zu Problemen mit der Datenqualität führt, wenn der Benutzer seinen Namen ändert.

Angenommen, die Tabellen sind wie folgt strukturiert:

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

Sie können ein GROUP BY verwenden und HAVING -Klausel, die Ihnen die UserID geben würde aller Benutzer mit mehr als 1 (oder einer von Ihnen gewählten Anzahl) Bestellungen. Dann verbinden Sie das mit den Members Tabelle, um den Namen zu erhalten.

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

Wenn Sie die Namen jedoch bereits gespeichert haben (und das ändert sich nicht), dann können Sie JOIN überspringen wie unten:

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