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

MySQL - Vælg række hvis vises mere end x gange i anden tabel

Jeg går ud fra (og håber), at du ikke gemmer brugerens navn to gange, da det fører til problemer med datakvaliteten, når brugeren skifter navn.

Forudsat at tabellerne er struktureret som nedenfor:

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

Du kan bruge en GROUP BY og HAVING klausul, som ville give dig UserID af alle brugere med mere end 1 (eller hvilket antal du end vælger) ordrer. Derefter tilslutter du det til Members tabel for at få navnet.

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

Men hvis du allerede har gemt navnene (og det ændrer sig ikke), så kan du springe JOIN over som nedenfor:

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


  1. Android SQLite-databasetabel oprettes ikke

  2. Arbejde med datoer i PostgreSQL

  3. Sådan får du en liste over kolonner med unikke begrænsninger i SQL Server-databasen - SQL Server / TSQL Tutorial Del 98

  4. Hives time()-funktion returnerer 12 timers urværdi