sql >> Database >  >> RDS >> Mysql

MySQL - Selecteer rij als deze meer dan x keer in een andere tabel voorkomt

Ik neem aan (en hoop) dat je de gebruikersnaam niet twee keer opslaat, aangezien dat leidt tot problemen met de gegevenskwaliteit wanneer de gebruiker zijn naam verandert.

Ervan uitgaande dat de tabellen als volgt zijn gestructureerd:

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

U kunt een GROUP BY . gebruiken en HAVING clausule die u de UserID . geeft van alle gebruikers met meer dan 1 (of welk aantal u ook kiest) bestellingen. Dan voeg je dat toe aan de Members tabel om de naam te krijgen.

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

Als je de namen echter al hebt opgeslagen (en dat verandert niet), dan kun je de JOIN overslaan zoals hieronder:

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


  1. Taakgeschiedenis van SQL Server Agent weergeven met Azure Data Studio

  2. PRAGMA table_list in SQLite

  3. Django extra gebruikersregistratiegegevens worden niet opgeslagen in de database

  4. mysql-datumformaat met betrekking tot een specifiek land